Integer类==与equals区别与应用转载
原创大家对java基本类型和封装类已经很熟悉了。但在使用中是否理解它的一些基本原则。以下代码可能会颠覆不了解基本实现的人的权利。java认知。代码如下。
public static void test(){
Integer a=1;
Integer b=1;
System.out.println(a==b);
System.out.println(a.equals(b));
}
输出结果可能是每个人都想到的,是的:
true
true
看看下面的代码,将输出什么?
public static void test(){
Integer a=150;
Integer b=150;
System.out.println(a==b);
System.out.println(a.equals(b));
}
输出结果:
false
true
结论:每个人都知道“==“这是两个变量的值是否相等的比较,对于引用变量,这意味着两个变量在堆中存储的地址是否相同。 equals操作表示的两个变量是否引用同一对象,即堆的内容是否相同。
但为什么相等1的时候==返回是true呢?
Integer a=150;//会将int类型通过valueof转换成Integer类型下面是valueof源码。
static final int low = -128;
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
也就是说-128到127之间的值缓存到IntegerCache.cache在,所以在Integer x=在-128到127在两者之间,返回相同的对象,因此出现上述情况。(如果已更换 >、>=、<、<=发生了什么?这种情况将自动解压缩比较值,这是以下解压缩操作。)
看看下面的代码。
public static void test(){
Integer a=150;
int b=150;
System.out.println(a==b);
System.out.println(a.equals(b));
}
输出结果:
true
true
原理:因为当与初始化值比较时,封装类型将被取消装箱并转换为基本类型。这里的比较是基本类型的值。
public int intValue() {
return value;
}
以上理解是个人阅读胖哥这本书所做的一些总结和理解,也是一种自我提升。如果在理解上有任何错误或偏差,我希望你能留下宝贵的意见。
作者:印度蒙古
来源:CSDN
原文:https://blog.csdn.net/m\_v\_v\_m/article/details/52209258
版权声明:本文为博主原创文章,转载请附上博客链接!
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123




