让我疑惑的代码之一_Integer

在我学习包装类知识的时候,遇到了一开始让我疑惑的代码

在测试“equals”和“==”之时,我发现,当赋给Integer的值不同的时候,boolean值可能会改变。

比如敲下以下代码

打印出来的boolean值是:

对于此,我是没有疑问的,根据我之前的博客https://blog.csdn.net/su_nmer/article/details/81110439中的第三部分的②部分便可知

但是,当我把数值改变之后:

运行之后,惊奇的发现“==”的boolean改变了

这不科学!!!!!!

后来,经过查询发现,这在编译器中是允许的,原因是当值在[-128,127]之间时,由于在此区间的数大部分会被人们当成数据使用,所以编译器就会把它当成基本数据类型进行处理,也就没有所谓的 new 说法,地址和内容都一样,所以运行之后的结果都是 ture;而不属于[-128,127]之间的数,就会被包装成包装类进行处理,相当于 new 出来一个新的Integer对象,所以尽管内容相同,但地址不同,于是运行之后便出现了ture  false  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值