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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© deqiqi939788736 中级黑马   /  2016-5-23 13:09  /  931 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        Integer i5 = 127;
        Integer i6 = 127;
        System.out.println(i5 == i6);                                1 ture
        System.out.println(i5.equals(i6));                        2 ture
        System.out.println("-----------");-------------------------------------------------------------------------
Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);                  1  false
        System.out.println(i5.equals(i6));                                    2  ture
        System.out.println("-----------");


为啥变成128就错了呢?

4 个回复

倒序浏览
来个高手解下惑
回复 使用道具 举报

当然不等

用到常量池了

懂了吗?
回复 使用道具 举报
吴群林 发表于 2016-5-23 13:32
当然不等

用到常量池了

不明白,能详细点?
回复 使用道具 举报
Integer是int的包装类,int的范围是-128~127,在这个范围内的,都会存放在jvm的常量池中,所以指向的地址都一样,超过127后,常量池中没有了,就得去new,new是在jvm的堆中的开辟一块空间,所以在内存中的地址就不一样了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马