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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何伟 中级黑马   /  2012-12-30 21:28  /  1600 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class IntegerDemo
{
        public static void main(String[] args)
        {
                Integer i1 = 100;
                Integer i2 = 100;
                Integer i3 = 200;
                Integer i4 = 200;
                System.out.println(i1 == i2);
                System.out.println(i3 == i4);
        }
}

为什么第一个打印的是ture,而第二个打印的却是false,如果都是ture或都是false我还能理解,可是一个ture一个是false我是晕了

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

6 个回复

倒序浏览
范围在-128到127之间的话就是true
其它数都是false
回复 使用道具 举报
李敬卫 来自手机 中级黑马 2012-12-30 21:43:49
藤椅
如果值在-128~127时,java虚拟机会给你自动拆箱然后比较int类型的值,如果不在,那你就要手动拆箱或装箱做比较了
回复 使用道具 举报
Integer类有一个缓存,它会存取介于-128-127之间的整数。(你可以去看源代码就知道了)
也就是说,如果你在-128-127之间创建Integer对象的话,他会把缓存的整数直接拿出来给你用,不会创建新的对象,
所以你创建的i1和i2其实是Integer缓存中的同一个对象。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
谢谢各位啊。。。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
Integer类有一个缓存,它会存取介于-128-127之间的整数。 这楼上已经说过了。除此这外, 这是一种“享元模式”  除此次外,String还有一个线程池(栈)有同样功能。哈哈~

回复 使用道具 举报
如果你用了具体的基本类型int,而不是用了integer包装器来定义,那么其结果都是相等的。在JAVA中,根据规定,自动打包的规范要求是介于-128~127之间时,int会被自动包装到固定的对象中,因此,对于Integer,当你的值在-128~127之间进行比较时候才会自动转化为int类型,超出这个范围都不成立。
关于Integer包装类的注意,尽量少用包装器来定义,因为这样编译器要自动的转换,不仅麻烦而且浪费资源,包装器一般只有在定义泛型数组时候才使用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马