让我疑惑的代码之一_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  

猜你喜欢

转载自blog.csdn.net/su_nmer/article/details/81149454