Integer类型的100==100和1000==1000有啥区别?

先来看一下示例:

是不是觉得很奇怪?

先搞清楚==的比较:

1、对于基本数据类型,==比较的是值。

2、对于引用数据类型,==比较的是他们在内存中的存放地址。如果两个引用指向同一个对象,那么==的结果就是true;否则即使内容相同,那==也不会是true。

打开Integer的源码,会发现有这么一段代码

也就是说,对于-128-127之间的数,赋值的时候会直接从缓存IntegerCache中获取,不会再创建新的对象。因此,上面的变量a和b指向同一个对象,因此==比较的结果是true,c和d是不同的对象,内存地址就不一样,所以==比较的结果是false。

看完了Integer,不妨看下Double

我淦!这又是什么情况?不急,看下源码先

每次赋值都会创建一个新的对象,为什么呢?因为在某个范围内,整数是有确切的个数的,但似乎浮点数却没有确切的个数。

总结:Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。

           Double、Float的valueOf方法的实现是类似的。

有人可能会问:那Boolean类型呢?

至于原因,看下Boolean源码

其中TRUE和FALSE是定义的两个静态成员变量。

最后,再来看下下面的程序结果:

第1、2点没啥疑问,对于后面几点做下说明:

当 "=="运算符的两个操作数,如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。另外,对于包装器类型,equals方法并不会进行类型转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值