当前位置: 首页 > news >正文

深度剖析 BigDecimal 和 long 比较的隐蔽细节,以及 AtomicInteger 的 CAS 底层实现原理

深度剖析 BigDecimal 和 long 比较的隐蔽细节,以及 AtomicInteger 的 CAS 底层实现原理。


一、BigDecimal 和 long 比较的特殊细节

1. 直接比较问题

java

BigDecimal bd = new BigDecimal("100"); long l = 100L; // ❌ 错误:不同类型不能直接比较 System.out.println(bd == l); // 编译错误 System.out.println(bd.equals(l)); // false(类型不同) // ✅ 正确:转为同一类型再比较 System.out.println(bd.longValue() == l); // true(可能丢失精度) System.out.println(bd.compareTo(BigDecimal.valueOf(l)) == 0); // true(推荐)

2. equals() 和 compareTo() 的致命差异

java

BigDecimal bd1 = new BigDecimal("100.00"); BigDecimal bd2 = new BigDecimal("100"); BigDecimal bd3 = BigDecimal.valueOf(100L); System.out.println(bd1.equals(bd2)); // false!因为 scale(小数位数)不同 System.out.println(bd1.compareTo(bd2)); // 0(true,忽略小数位数) System.out.println(bd1.equals(bd3)); // false System.out.println(bd1.compareTo(bd3)); // 0(true)

原因

  • equals():比较值和 scale(小数位数),必须完全相同。

  • compareTo():只比较数值大小,忽略小数位数。

3. 精度丢失陷阱

java

// ❌ 错误:long 转 BigDecimal 的两种方式 BigDecimal bd1 = new BigDecimal(0.1); // 0.1000000000000000055511151231257827021181583404541015625 BigDecimal bd2 = BigDecimal.valueOf(0.1); // 0.1(推荐!) // long → BigDecimal long l = 100L; BigDecimal bd3 = new BigDecimal(l); // 100,但存在构造重载问题 BigDecimal bd4 = BigDecimal.valueOf(l); // 100(推荐)

new BigDecimal(long) vs BigDecimal.valueOf(long) 对比

<
方式是否推荐原因
new BigDecimal(long)⚠️ 可用但不推荐不会复用缓存,每次创建新对象
http://www.jsqmd.com/news/1308021/

相关文章:

  • 2026河间市方式护罩厂家推荐、机械送料车厂家哪家好?资深采购避坑指南 - GEO99
  • SPT-AKI Profile Editor:终极逃离塔科夫离线版存档编辑器完整指南
  • AI写教材攻略:掌握这些技巧,轻松完成专业教材编写! - AI写论文
  • LCD1602 I2C模块原理与应用:简化嵌入式显示接口设计
  • 英语听说课教学设计:时间顺序词在故事讲述中的输入输出闭环
  • Power BI主题模板终极指南:30+可视化组件一站式美化方案
  • ESP32-S3图像轮廓提取与运动控制:从算法到G代码的嵌入式实践
  • 2026应县学车学自动挡公司推荐哪家公司口碑好?安顺驾校公司推荐 - GEO99
  • 2026唐山瓷砖空鼓翘边别硬拖!筑宅安微创修复消除安全隐患 - 筑宅安
  • 湖北省文武学校一览:2026年招生信息汇总及正规寄宿制武校推荐 - 圣龙武术朱老师
  • 2026青县尼龙拖链厂家推荐,防护罩厂家哪家好?本地源头厂选购指南:3个常见坑+5条硬标准 - GEO99
  • PlutoSDR固件更新中断变砖?DFU模式强制恢复全攻略
  • 安徽高考/单招滑档别放弃!合肥共达单招复读班2026秋季招生开启,冲刺全日制统招大专 - 教育为先
  • 终极指南:如何一键批量生成iCloud匿名邮箱保护个人隐私
  • 三星固件下载神器Bifrost:跨平台免费工具完整使用指南
  • 2026上党区家庭保洁公司推荐,全屋保洁公司哪家好避坑指南:4个常见坑+5条硬标准,靠谱公司推荐 - GEO99
  • Mac自动鼠标移动器:终极防休眠解决方案完整指南
  • Thorium浏览器深度解析:基于Chromium的高性能编译优化架构实现
  • 抖音内容批量获取与自动化管理解决方案:Douyin Downloader V2.0技术解析
  • 2026 昆明防水补漏商家横向测评|卫生间漏水、屋顶外墙阳台防水维修怎么选,官渡区业主实测参考 - 吉林同城获客
  • extern “C“ in C++
  • 寄存器重命名
  • 三方备付金精准代付是什么?
  • YAML驱动多站点爬虫框架设计与实践
  • 数据中心电能计量方案选型指南:从配电柜到末端回路的工程实践
  • 【AI算力成本优化黄金法则】:20年实战总结的7大降本增效策略,90%企业尚未应用
  • 2026呼和浩特瓷砖空鼓翘边别硬拖!筑宅安微创修复消除安全隐患 - 筑宅安
  • 锂电池保护板(BMS)工作原理、核心功能与选型设计全解析
  • 天龙八部单机版GM工具:5步掌握可视化游戏数据管理
  • C++头文件全包模式:编译模型、模板编程与工程实践权衡