黑马程序员技术交流社区

标题: 关于Integer的疑问 [打印本页]

作者: 孙妍娜    时间: 2014-7-10 22:09
标题: 关于Integer的疑问
以下代码,为什么输出的是i1==i2,i3!=i4?求指教。
    public static void main(String[] args)
        {
                Integer i1=100;
                Integer i2=100;
                if(i1==i2)
                {
                        System.out.println("i1==i2");
                }
                else
                {
                        System.out.println("i1!=i2");
                }
                Integer i3=200;
                Integer i4=200;
                if(i3==i4)
                {
                        System.out.println("i3==i4");
                }
                else
                {
                        System.out.println("i3!=i4");
                }
        }
作者: 淡夜清风    时间: 2014-7-10 22:33
对于基本类型的整数,要装箱称为Integer对象的时候,如果这个数字在一个字节之内(-128-127),把它包装成一个Integer对象后,会把它缓存起来,缓存到一个池里面。下次又要把一个数字当成Integer对象的时候,先去看池里面有没有这个数字,有的话就直接拿了。这样就节省了内存空间。
因为比较小的整数,使用的频率会很高。会反复的出现。如果一出现就装成一个对象,那么对象就会越来越多。对象本来就是不怎么改变的,粒度又很小,对象也很小。
大家都去用它,而不去改变它的数据,没必要每个数字都对应一个对象。只要有一个这样的对象就可以了,大家都来使用这个对象。这是一种设计模式。叫享元模式。
--------------------
Integer i1=100; //这里的i1被赋值为100,在(-128-127)之间的数。
所以100会被封装成对象被缓存到一个池里面。
当程序执行到 Integer i2=100的时候,先去看池里面有没有100这个数字。当然是有的啦。。所以直接从池子里面取了,而不需要再去封装对象了。因此i1和i2所引用的都是同一个对象。所以i1==i2。
-------------------
上面的解释你明白了,i3!=i4你也就明白啦。。
作者: 卞新浩    时间: 2014-7-10 22:39
2楼解释的好清楚呀  赞个
作者: hxwo211314    时间: 2014-7-10 23:31
2楼解释的很清楚啦,我也不说什么了。
作者: 杨冬冬    时间: 2014-7-10 23:58
这里是不是涉及到Integer的装箱和拆箱的原理吗
作者: 孙妍娜    时间: 2014-7-11 20:19
淡夜清风 发表于 2014-7-10 22:33
对于基本类型的整数,要装箱称为Integer对象的时候,如果这个数字在一个字节之内(-128-127),把它包装成 ...

很清楚呢,明白了,非常感谢。
作者: 霜林醉zhx    时间: 2014-7-11 20:34
127和128的问题,毕老师的视频里讲得很清楚
作者: 215041631    时间: 2014-7-11 21:25
我记得是在127-128的范围内,INTEGER类型的数会跟字符串常量池类似的引用
作者: xiaobo    时间: 2014-7-11 21:36
淡夜清风 发表于 2014-7-10 22:33
对于基本类型的整数,要装箱称为Integer对象的时候,如果这个数字在一个字节之内(-128-127),把它包装成 ...

解释很到位  赞...
作者: ╮福尔摩斯`    时间: 2014-7-11 22:21
2楼不愧是那么高等级的
作者: 歸羽    时间: 2014-7-11 23:09
很详细的解释,学习了~
作者: 裤裆里的温柔、    时间: 2014-7-11 23:25
楼上正解
作者: scenery_sky    时间: 2014-7-11 23:44
享元模式
作者: cheye0207    时间: 2014-7-12 02:41
呵呵,又复习了一次享无模式




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2