黑马程序员技术交流社区
标题:
请问 i 和 j 为什么不相等?
[打印本页]
作者:
我能学编程吗
时间:
2013-10-29 19:14
标题:
请问 i 和 j 为什么不相等?
本帖最后由 我能学编程吗 于 2013-10-30 14:02 编辑
Integer i = new Integer(1);
Integer j = i;
i = i + 1;
System.out.println(i == j); // false
复制代码
作者:
雨过丶天已晴
时间:
2013-10-29 19:43
先说一说这个代码的第三步运算过程:
i = i + 1;
对象i先拆箱,变成int型与1相加,然后又自动装箱转化成Integer对象
再说一说第四句代码的运算:
System.out.println(i == j);
由于i 与 j均在–128到127之间,所以Integer对象会重用,也就是当i 与 j的值相等的时候,两个对象就相等
但是这里 i = 2与 j = 1, i , j的值不相等,所以会输出false。
作者:
零下五度的水
时间:
2013-10-29 19:49
帮助文档原话:"The Class instance representing the primitive type int."
Integer实例本身还是个int
作者:
靓仔
时间:
2013-10-29 19:58
给你个例子,希望你能懂。首先声明你的i=2;j=1,所以肯定为false。如果i和j值指向了同一个对象,就为ture。
/*
JDk版本以后出现的心特性
*/
class IntegerDemo1
{
public static void main(String[] args)
{
//Integer x=new Integer(4)
Integer x=4;//自动装箱。new Integer(4);
x = x+2;//4是一个对象,直接加int 2,x+2进行自动拆箱。变成了int类型,和2进行加法运算
//再将和进行装箱赋给x;
Integer m=128;
Integer n=128;
System.out.println(m==n);//false
Integer a=127;//
Integer b=127;
System.out.println(a==b);//true 因为a和b指向了同一个Integer对象
//因为当数值在byte范围内容(-128-127之间),对于新特性,如果该数值已经存在,则不会再开辟新的空间。
//System.out.println("Hello World!");
}
}
作者:
我能学编程吗
时间:
2013-10-29 20:11
谢谢楼上各层的回答,我明白了,
i = i + 1; 中:
先是拆包进行相加: i.intValue() + 1,值为2
后再装包赋值给i : i = new Integer(2);
所以合起来,i = i + 1 相当于:
i = new Integer(i.intValue() + 1);
从这里可知,我们改变的并不是i里面int的值,而是把变量i指向了一个新的Integer对象
作者:
黄炳期
时间:
2013-10-29 20:21
明白了的话可以重新编辑帖子,修改主题为“提问结束”
作者:
To
时间:
2013-10-30 00:10
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2