做了这么多年java开发,关于 Long 和 BigDecimal…
2019-03-10 11:58:27来源:博客园 阅读 ()
Java 里面的 == 和equals的坑是在是太多了,即使做了多年java开发的程序员也不一定就能准确说出 a == b 或 a.equals(b) 这样简单的问题的答案。
请看下面这26道关于Long 和 bigdecimal 的相等比较,看看你是否可以准确说出每行代码的输出结果呢?
答案在文末,请先看题:
关于Long的相等比较:
1、System.out.println(Long.valueOf("9999999").equals(new Long(9999999L))); 输出:true/false?
2、System.out.println(Long.valueOf("9999999") == new Long(9999999L)); 输出:true/false?
3、System.out.println(Long.valueOf("1") == new Long(1L)); 输出:true/false?
4、System.out.println(1L == new Long(1L)); 输出:true/false?
5、System.out.println(new Long(1L) == new Long(1L)); 输出:true/false?
6、System.out.println(999999L == new Long(999999L)); 输出:true/false?
7、System.out.println(999999L == Long.valueOf("999999")); 输出:true/false?
8、System.out.println(Long.valueOf("999999") == Long.valueOf("999999")); 输出:true/false?
9、System.out.println(Long.valueOf("1") == Long.valueOf("1")); 输出:true/false?
10、System.out.println(Long.valueOf("127") == Long.valueOf("127")); 输出:true/false?
11、System.out.println(Long.valueOf("128") == Long.valueOf("128")); 输出:true/false?
12、System.out.println(Long.valueOf("-128") == Long.valueOf("-128")); 输出:true/false?
13、System.out.println(Long.valueOf("-129") == Long.valueOf("-129")); 输出:true/false?
关于BigDecimal的相等比较:
1、System.out.println(BigDecimal.valueOf(0) == BigDecimal.ZERO); 输出:true/false?
2、System.out.println(BigDecimal.valueOf(new Long(0)) == BigDecimal.ZERO); 输出:true/false?
3、System.out.println(BigDecimal.valueOf(0.0) == BigDecimal.ZERO); 输出:true/false?
4、System.out.println(BigDecimal.valueOf(0) == BigDecimal.valueOf(0)); 输出:true/false?
5、System.out.println(BigDecimal.valueOf(11) == BigDecimal.valueOf(11)); 输出:true/false?
6、System.out.println(BigDecimal.valueOf(10) == BigDecimal.valueOf(10)); 输出:true/false?
7、System.out.println(BigDecimal.valueOf(11).equals(BigDecimal.valueOf(11))); 输出:true/false?
8、System.out.println(BigDecimal.valueOf(9999).equals(BigDecimal.valueOf(9999))); 输出:true/false?
9、System.out.println(BigDecimal.valueOf(9999.00).equals(BigDecimal.valueOf(9999.00))); 输出:true/false?
10、System.out.println(BigDecimal.valueOf(9999.0).equals(BigDecimal.valueOf(9999.00))); 输出:true/false?
11、System.out.println(BigDecimal.valueOf(9999.0).equals(new BigDecimal(9999.00))); 输出:true/false?
12、System.out.println(BigDecimal.valueOf(0.0).equals(BigDecimal.ZERO)); 输出:true/false?
13、System.out.println(BigDecimal.valueOf(9999.0).compareTo(new BigDecimal(9999.00)) == 0); 输出:true/false?
---------------------------------------------------------------------------------------------------------------------------------------------------
答案来了
---------------------------------------------------------------------------------------------------------------------------------------------------
10
9
8
7
6
5
4
3
2
1
请看答案:
Long
1、System.out.println(Long.valueOf("9999999").equals(new Long(9999999L))); 输出:true
2、System.out.println(Long.valueOf("9999999") == new Long(9999999L)); 输出:false
3、System.out.println(Long.valueOf("1") == new Long(1L)); 输出:false
4、System.out.println(1L == new Long(1L)); 输出:true
5、System.out.println(new Long(1L) == new Long(1L)); 输出:false
6、System.out.println(999999L == new Long(999999L)); 输出:true
7、System.out.println(999999L == Long.valueOf("999999")); 输出:true
8、System.out.println(Long.valueOf("999999") == Long.valueOf("999999")); 输出:false
9、System.out.println(Long.valueOf("1") == Long.valueOf("1")); 输出:true
10、System.out.println(Long.valueOf("127") == Long.valueOf("127")); 输出:true
11、System.out.println(Long.valueOf("128") == Long.valueOf("128")); 输出:false
12、System.out.println(Long.valueOf("-128") == Long.valueOf("-128")); 输出:true
13、System.out.println(Long.valueOf("-129") == Long.valueOf("-129")); 输出:false
总结
对于Long的比较,不要用等号,规律太多,根本记不住。而equals方法是非常安全的,可以放心用equals进行相等的比较。
BigDecimal
1、System.out.println(BigDecimal.valueOf(0) == BigDecimal.ZERO); 输出:true
2、System.out.println(BigDecimal.valueOf(new Long(0)) == BigDecimal.ZERO); 输出:true
3、System.out.println(BigDecimal.valueOf(0.0) == BigDecimal.ZERO); 输出:false
4、System.out.println(BigDecimal.valueOf(0) == BigDecimal.valueOf(0)); 输出:true
5、System.out.println(BigDecimal.valueOf(11) == BigDecimal.valueOf(11)); 输出:false
6、System.out.println(BigDecimal.valueOf(10) == BigDecimal.valueOf(10)); 输出:true
7、System.out.println(BigDecimal.valueOf(11).equals(BigDecimal.valueOf(11))); 输出:true
8、System.out.println(BigDecimal.valueOf(9999).equals(BigDecimal.valueOf(9999))); 输出:true
9、System.out.println(BigDecimal.valueOf(9999.00).equals(BigDecimal.valueOf(9999.00))); 输出:true
10、System.out.println(BigDecimal.valueOf(9999.0).equals(BigDecimal.valueOf(9999.00))); 输出:true
11、System.out.println(BigDecimal.valueOf(9999.0).equals(new BigDecimal(9999.00))); 输出:false
12、System.out.println(BigDecimal.valueOf(0.0).equals(BigDecimal.ZERO)); 输出:false
13、System.out.println(BigDecimal.valueOf(9999.0).compareTo(new BigDecimal(9999.00)) == 0); 输出:true
总结
对于BigDecimal的比较,不用用 == 也不要用equals,规律太多,根本记不住,而应该用compareTo方法。
-----------------------------------------------------------------------------------------------------------------------------------------------
推荐阅读:
- 微信小程序客服消息实时通知之最佳实践
- 为什么我们团队管理慢慢变成了不敢管,管多了就要离职?
- [原创]基于VueJs的前后端分离框架搭建之完全攻略
原文链接:https://www.cnblogs.com/leotsai/p/java-long-bigdecimal-equals.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:图片缩小尺寸算法
- 天哪!手动编写mybatis雏形竟然这么简单 2020-06-06
- 从零开始的数组,这么设计么是为什呢? 2020-05-24
- java.lang.String 的 + 号操作到底做了什么? 2020-05-22
- Spring中资源的加载原来是这么一回事啊! 2020-05-07
- LinkedHashMap 源码分析,底层竟这么简单! 2020-05-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash