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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如,其运算结果是false和true实在想不明白,求解……
public class Test01 {
      public static void main(String[] args) {
          Integer i1=70;
          Integer i2=70;
          Integer i3=140;
          Integer i4=140;
        System.out.println(i3==i4);
        System.out.println(i3==(i1+i2));
    }
       
}

评分

参与人数 1黑马币 +20 收起 理由
Alan_Kwan + 20 赞一个!

查看全部评分

5 个回复

倒序浏览
装在容器里面了,你要使用或者比较大小麻烦转换出来。。。
因该你这样比较的是内存地址。。
回复 使用道具 举报
简单说就是内存地址不一样,对于较小的整型,在装箱的时候是从常量池取值以节省内存(可以试一下127和128)

点评

嗯  发表于 2015-4-23 10:45
回复 使用道具 举报
表示挖牛角尖啊。
回复 使用道具 举报
看刘意老师的视频说,1~127的整数常量都是重byte常量池里调用的,超过这个范围的整数常量好像是生成在堆内存的,所以说i1和i2指向的是同一个地址引用,后面那打印输出的(i1+i2)其实只是做了拆箱的操作,并没赋值操作,所以它和i3==140是一样的……回去想了想,这么理解似乎说得通了……
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马