java Integer 它们相等吗?

2024-11-30 19:58:29
推荐回答(5个)
回答1:

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

也就是说
Integer -128~127实际上你可以看成是整形int,所以第一个类的输出结果应该是==
Interger 128以上的数值就不能看成int了,他是对象,两个值相同的不同的对象如果用==判断肯定是不等的,可以用equals判断。

回答2:

Java中Integer和int存在Autoboxing,int自动装箱成Integer的过程中,如果数值是在-128~127之间的值的话,那么会在在内存中供重用
也就是说
Integer -128~127实际上你可以看成是整形int,所以第一个类的输出结果应该是==
Interger 128以上的数值就不能看成int了,他是对象,两个值相同的不同的对象如果用==判断肯定是不等的,可以用equals判断

回答3:

自动装箱是对于从 -128 到 127 之间的信息值,它们在被装箱为 对象数据后会在内存中被重用.所以上面两个是不相同的.

回答4:

不想等!因为它们比较的不是value而是地址,它们在电脑中的地址不相等的!

回答5:

127是个临界点,127包括127以前的是i1==i2,127以后就是i1!=i2,Integer类型的变量当赋值-128到127之内的值的时候,它是会去类似于字符串常量池的一个Integer的池中去取,所以值超过127就为false