A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我能学编程吗 中级黑马   /  2013-10-29 19:14  /  1090 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 我能学编程吗 于 2013-10-30 14:02 编辑
  1. Integer i = new Integer(1);
  2. Integer j = i;
  3. i = i + 1;
  4. System.out.println(i == j); // false
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

6 个回复

倒序浏览
先说一说这个代码的第三步运算过程:
  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。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报 1 0
帮助文档原话:"The Class instance representing the primitive type int."
Integer实例本身还是个int
回复 使用道具 举报
给你个例子,希望你能懂。首先声明你的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!");
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
谢谢楼上各层的回答,我明白了,
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对象
回复 使用道具 举报
明白了的话可以重新编辑帖子,修改主题为“提问结束”
回复 使用道具 举报
To 金牌黑马 2013-10-30 00:10:53
7#
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马