java 2个Integer比较的问题(==)

来源:百度知道 编辑:UC知道 时间:2024/07/02 15:46:31
public class test{
public static void main(String[] args){
Integer x = 400;
Integer y = x;
x++;
System.out.println(x == y);
}
}

为什么运行后是:false ?
请问,这里不是 Integer的引用y 指向了x吗 ? x的变化应该会影响到y吧 ?

这个个Integer这个特殊wrapper类有关系
关于这个类,java是这样设计的,它的前X位(X是多少记不清了)是虚拟机预先分配好了内存的,也就是说只要你不强制去new出一个对象,只要值相同的对象地址都相同,相反你值不同地址自然也不一样了

PS: 回答者: 有的我不知道 - 中级魔法师 四级 2009-10-13 12:25

别误导人了,很负责的告诉你,a==b 为true

还有 Integer y = x 就是把 x 引用的地址赋给了y 自己先搞清楚再来教人吧

x这时是401.

你可以在
System.out.println(x == y);
前加一句
System.out.println("x:"+x+" y:"+y);
就知道为啥是false了.

嗯严谨的来说..==是比较的内存地址.当你创建两个变量对象并且赋值的时候.系统会为你在内存中开辟两块内存空间.他们的地址是不一样的..==就是比地址.当你new时.只要对象值不是null那么他们永远都是false..要比较值的使用.可用用Object下的.equals(Object obj)方法进行值的比较.
====================
对当你没有进行++操作之前是x,y引用的是一块地址.但是当其中一个值发生变化的时候..系统会先检测这个地址的引用有那些.当有不只一个对象对他进行引用时.会为改变值的对象重新开辟一个新的内存地址. 反而当只有一个对象引用这个地址的时候就直接修改这个地址的中的值.

本来就是false啊 ,你直接写成这样
Integer x = 400;
Integer y = 400;
别x++ 结果它还是false

再举个例子
String a=new String("a");
String b=new String("a");
System.out.println(a == b);