做了这么多年java开发,关于 Long 和 BigDecimal 的相等比较,你可不一定能准确回答下面 26 个问题
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方法。
-----------------------------------------------------------------------------------------------------------------------------------------------
推荐阅读:
做了这么多年java开发,关于 Long 和 BigDecimal 的相等比较,你可不一定能准确回答下面 26 个问题的更多相关文章
- 大学同学做Java开发比我多5K,八年老Android只会crud该转Java吗?
最近在网上看到这样一个帖子: 做了八年Android开发,感觉这块做着也挺没意思,日常工作就是做一些架构优化,质量数据监控,改一改构建脚本,最主要的是业务负责人没有一个是做客户端的,都是后端的人. 最 ...
- 转载:做Java开发这一年 (火龙果软件)
转载:http://www.uml.org.cn/success/201410205.asp 从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了. ...
- 所有做java开发的都是些垃圾
所有做java开发的都是些垃圾,再垃圾的框架,只要有人用,对java程序员来说那就是高性能,高可用,解耦的,非常优秀的一款框架.属于吃屎都吃的津津有味.java里的框架都是垃圾,连一个不错的都没有.比 ...
- 【20K必备知识点】北上广Java开发月薪20K往上,该如何做,需要会写什么
有人回答说这只能是大企业或者互联网企业工程师才能拿到.也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该已经转管理.还有区域问题,这个不在我的考虑范围内,因为除了北上广深杭,其他地方也很难 ...
- java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?)
java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?) 很多人做Java开发2.3年之后,都会觉得自己遇到了瓶颈.什么都会又什么都不会,如何改变困境,为什么很多人写了7. ...
- 北上广Java开发月薪20K往上,该如何做,需要会写什么
这个问题可能很多人会说这只是大企业或者互联网企业工程师才能拿到.也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该已经转管理.还有区域问题,这个不在我的考虑范围内,因为这方面除了北上广深杭 ...
- 使用Eclipse-Maven-git做Java开发(3)--Eclipse的安装和配
使用Eclipse-Maven-git做Java开发(3)--Eclipse的安装和配 https://my.oschina.net/songxinqiang/blog/474530
- 一个老牌程序员说:做Java开发,怎么可以不会这 20 种类库和 API
- 《阿里巴巴Java开发手册v1.2》解析(编程规约篇)
之前在乐视天天研究各种底层高大上的东西,因为我就一个人,想怎么弄怎么弄.如今来了新美大,好好研读一下<阿里巴巴Java开发手册v1.2>.还要对这么看似简单的东西解析一番.毕竟现在带团队, ...
随机推荐
- SSM-MyBatis-13:Mybatis中多条件查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...
- Java系列1 -- 浅谈面向对象
也许每一个计算机专业的人,在大学学习java的时候,老师开始时都会说这么一句话,"Java是一门面向对象的语言".那么面向对象到底是什么,他有什么好处,或者他比其他流行的语言C/C ...
- 巩固java(一)----java与对象
C语言是一种面向过程语言,在解决问题时,要先分析出问题的解决步骤,然后按顺序一步步实现,使用的时候一个一个调用.所以面向过程编程是以过程为中心的. 不同于面向过程编程,面向对象编程 ...
- 数据分析工具Pandas
参考学习资料:http://pandas.pydata.org 1.什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analys ...
- 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯
Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...
- 【爆料】-《堪培拉大学毕业证书》Canberra一模一样原件
☞堪培拉大学毕业证书[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...
- Uber无人驾驶致命车祸翻案:6秒前已侦测到死者
此前有消息称,今年三月 Uber 无人驾驶汽车致命车祸是软件失误导致的.现在,美国运输安全委员会的事故初步调查报告给出了不同的说法. 从图中可见,黄色线以米为单位显示,橙色线显示了地图线路的中心,紫色 ...
- Centos 7 Linux系统修改网卡名称为ethx
一.Centos7 系统安装完成后更改网卡名称方法 1.查看Centos7系统默认的网卡配置(eno16777736) [root@server ~]# ifconfig eno16777736: f ...
- .NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证
内容:本文带大家使用IdentityServer4进行使用OpenID Connect添加用户认证 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 在这一篇文章中我们希望使用Ope ...
- Java代码规范与质量检测插件SonarLint
1. SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中的坏味道 下载与安装 在需要检测的单个文件或者单个项目上右键 --> Analyze --> ...