java Integer 它们相等吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Integer 它们相等吗?相关的知识,希望对你有一定的参考价值。

public class Test
public static void main(String[] args)
Integer i1 = 100;
Integer i2 = 100;

if(i1 == i2)
System.out.println("i1==i2");
else
System.out.println("i1 != i2");




public class Test1
public static void main(String[] args)
Integer i1 = 200;
Integer i2 = 200;

if(i1 == i2)
System.out.println("i1==i2");
else
System.out.println("i1 != i2");




这两个类运行的结果是一样的吗? 如果不是一样的为什么呢? 觉得是一样的就请试一下!! </img>

不相等
在给Integer赋值时,实际上是自动装箱的过程,也就是调用了Integer.valueOf(int)方法,当这个值大于等于-128并且小于等于127时使用了常量池,所以前两个地址是相等的,但是后两个超过了127,故不使用常量池。

也就是说
Integer -128~127实际上你可以看成是整形int,所以第一个类的输出结果应该是==
Interger 128以上的数值就不能看成int了,他是对象,两个值相同的不同的对象如果用==判断肯定是不等的,可以用equals判断。
参考技术A Java中Integer和int存在Autoboxing,int自动装箱成Integer的过程中,如果数值是在-128~127之间的值的话,那么会在在内存中供重用
也就是说
Integer -128~127实际上你可以看成是整形int,所以第一个类的输出结果应该是==
Interger 128以上的数值就不能看成int了,他是对象,两个值相同的不同的对象如果用==判断肯定是不等的,可以用equals判断
参考技术B 自动装箱是对于从 -128 到 127 之间的信息值,它们在被装箱为 对象数据后会在内存中被重用.所以上面两个是不相同的. 参考技术C 不想等!因为它们比较的不是value而是地址,它们在电脑中的地址不相等的! 参考技术D 127是个临界点,127包括127以前的是i1==i2,127以后就是i1!=i2,Integer类型的变量当赋值-128到127之内的值的时候,它是会去类似于字符串常量池的一个Integer的池中去取,所以值超过127就为false

以上是关于java Integer 它们相等吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java中int integer相互如何 转换

Java中intinteger该如何相互转换?

[Java]判断Integer值相等最好不用==最好使用equals

Integer值判断是否相等问题

java面试问题收集

Integer值判断是否相等问题