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

publicclasstest{publicstaticvoidmain(String[]args){Integerx=400;Integery=x;x++;System... 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吧 ?
展开
 我来答
little902
2009-10-13 · TA获得超过812个赞
知道小有建树答主
回答量:1162
采纳率:0%
帮助的人:795万
展开全部
x这时是401.

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

嗯严谨的来说..==是比较的内存地址.当你创建两个变量对象并且赋值的时候.系统会为你在内存中开辟两块内存空间.他们的地址是不一样的..==就是比地址.当你new时.只要对象值不是null那么他们永远都是false..要比较值的使用.可用用Object下的.equals(Object obj)方法进行值的比较.
====================
对当你没有进行++操作之前是x,y引用的是一块地址.但是当其中一个值发生变化的时候..系统会先检测这个地址的引用有那些.当有不只一个对象对他进行引用时.会为改变值的对象重新开辟一个新的内存地址. 反而当只有一个对象引用这个地址的时候就直接修改这个地址的中的值.
kysdvnm
2009-10-13 · TA获得超过381个赞
知道小有建树答主
回答量:460
采纳率:0%
帮助的人:0
展开全部
这个个Integer这个特殊wrapper类有关系
关于这个类,java是这样设计的,它的前X位(X是多少记不清了)是虚拟机预先分配好了内存的,也就是说只要你不强制去new出一个对象,只要值相同的对象地址都相同,相反你值不同地址自然也不一样了

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

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

还有 Integer y = x 就是把 x 引用的地址赋给了y 自己先搞清楚再来教人吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
553722769
2009-10-13 · 超过20用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:0
展开全部
x,y为Integer类的对象引用

当用“==”来判断两个引用时,是判断它们是否指向同一个对象,如果指向同一个对象,返回true,否则返回false

这里x,y指向的是不同的对象,所以返回false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiest1986
2009-10-13 · TA获得超过3432个赞
知道小有建树答主
回答量:1013
采纳率:0%
帮助的人:1126万
展开全部
应该是y指向了x所指向的对象,也就是400.

但是x++之后,x所指向的对象为401,但是y所指向的对象并没发生变化。
所以x与y在程序最后并不指向同一个对象,结果为false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
asherlay
2009-10-13 · 超过16用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:0
展开全部
如果你要比较里面的数值,而且是integer的话,请用equals
如果你要用==比较,是比较2个的内存地址,哪怕他们值是一样的,结果还是false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式