版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38361347/article/details/81916620
Integer 与 int 数值比较?
Integer b1 = 100;
Integer b2 = 100;
Integer c1 = 1501;
Integer c2 = 1501;
if(b1==b2) {
System.out.println("相等");//相等
}else {
System.out.println("不相等");
}
if(c1==c2) {
System.out.println("相等");
}else {
System.out.println("不相等");//不相等
}
乍一看结果是相等的,其实不然。
1,Integer 和 Integer 100 相比较是相等?
2,Integer 和 Integer 127以上 相比较是相等?
答案:
相等
不相等
为什么会这样子?原因是什么?我是不是学了假的Java?
通过查看Integer源代码发现?
你会发现Integer类内部 通过静态内部类提供了一个缓存池,范围在-128~127之间,如果超过这个范围 Integer 值都是new出来的对象,比较的话肯定会出错!
疑问?为什么这么写Integer源码?
Integer缓存了-128~127之间的数,这是在类加载期间就完成的。以后需要的时候直接指向它就可以了,省去了构造对象的开支,提高了效率。
只能采用equals 比较!
查看源码Integer equals方法你会发现
所以
或者
同理Long也是一样