原 Integer用“==”比较127时相等,而比较128时却不相等
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/Dream/article/details/1196
代码演示
package com.mszl.eq;
/**
* 功能:Integer用”==“比较127时相等,而比较128时却不相等
* 备注:更多资料请访问 http://www.91mszl.com
* @author bobo teacher
*/
public class Test1 {
public static void main(String[] args) {
Integer aa=127;
Integer bb=127;
Integer cc=128;
Integer dd=128;
System.out.println(aa==bb);
System.out.println(aa.equals(bb));
System.out.println(" ************* ");
System.out.println(cc==dd);
System.out.println(cc.equals(dd));
}
}
执行结果
true
true
*************
false
true
看到执行结果,大家都很疑惑不应该都是true吗,怎么会是false了,我们来看看IntegerCache的源码
我们会发现Integer缓存了-128 到127之间的数,如果超过这个范围则会去new对象。
所以当 Integer cc=128 和Integer dd=128用“==” 来进行比较结果为false,而Integer是引用类型,用equals来进行比较,Integer重写了Object类的equals和hashCode,实际上比较的是值,而不是引用地址。所以为true
2020-04-02 17:10:11 阅读(763)
名师出品,必属精品 https://www.91mszl.com
博主信息