黑马程序员技术交流社区

标题: 今天课上有一道题没听明白,忘高手指点啊!! [打印本页]

作者: 耿明明    时间: 2013-6-7 21:12
标题: 今天课上有一道题没听明白,忘高手指点啊!!
本帖最后由 耿明明 于 2013-6-7 21:23 编辑

Integer i=129;
Integer j=129;
System.out.println(i==j);//false
System.out.println(i.equals(j));//true
Integer a=110;
Integer b=110;
System.out.println(a==b);//true
System.out.println(a.equals(b));//true
标红的那行是什么原理啊?{:soso_e183:}详细一点啊,我的理解能力有限!!

作者: 李培根    时间: 2013-6-7 21:18
就是integer的范围在128之内会复用的,内存中只存在一份。
作者: 于腾飛    时间: 2013-6-7 21:18
包装类的自动装箱和自动拆箱,超出BYET的取值范围就重新分配空间,所以第一个是两个对象,第二个都指向一个对象!
作者: 陈志强    时间: 2013-6-7 21:20
为什么前面的返回true而后面的运算返回false呢?
对于基本数据类型的整数,装箱成Integer对象时,如果该数值在一个字节内,(-128~127),
一旦装箱成Integer对象后,就把它缓存到磁里面,当下次,又把该数值封装成Integer对象时
会先看磁里面有没有该对象,有就直接拿出来用,这样就节省了内存空间。因为比较小的整数,
用的频率比较高,就没必要每个对象都分配一个内存空间。
这就是享元模式!比如26个英文字母,10个阿拉伯数字

这是笔记,希望对你有点帮助。
作者: 耿明明    时间: 2013-6-7 21:22
于腾飛 发表于 2013-6-7 21:18
包装类的自动装箱和自动拆箱,超出BYET的取值范围就重新分配空间,所以第一个是两个对象,第二个都指向一个 ...

:handshake受教了,谢谢
作者: 耿明明    时间: 2013-6-7 21:23
李培根 发表于 2013-6-7 21:18
就是integer的范围在128之内会复用的,内存中只存在一份。

虽然有点笼统,不过还是感谢!!:handshake
作者: 朱志江    时间: 2013-6-7 21:24
Integer类型包装类当中,如果取值范围在byte(-128~127)内,JVM就不在进行开辟空间,目的是为了节省节省内存空间.
这个也是设计模式中的一种,享元模式.
作者: 耿明明    时间: 2013-6-7 21:24
陈志强 发表于 2013-6-7 21:20
为什么前面的返回true而后面的运算返回false呢?
对于基本数据类型的整数,装箱成Integer对象时,如果该数 ...

感谢:handshake
作者: 王林涛    时间: 2013-6-7 21:24
本帖最后由 王林涛 于 2013-6-7 21:29 编辑

Integer i=129;//这儿相当于Integer i = new Integer(129);这里是建立Integer对象
Integer j=129;
System.out.println(i==j);//false,所以运行为false
--------------------------------------------------------------------------------------------------------
Integer a=110;
Integer b=110;
System.out.println(a==b);//true
System.out.println(a.equals(b));//这里覆盖了equals方法,建立了Integer自己的比较方式.
装类的自动装箱和自动拆箱,当整数取值在byte的取值范围时,jvm将不再开辟新的内存空间.



作者: 花心々小土豆    时间: 2013-6-7 21:28
本帖最后由 花心々小土豆 于 2013-6-7 22:02 编辑

jdk1.5版本出现的新特性。
当数值在byte范围内[-128,127),对于新特性,如果该数值已经存在,则不会在开辟新的空间
Integer i=129;
Integer j=129;
值超出范围,第二句在内存中开辟了新的空间存放129,i 和 j 指向的是内存中两个不同的区域。
Integer a=110;
Integer b=110;
没超出范围,a 和 b 指向的是内存中同一个存放129的区域。
作者: 神之梦    时间: 2013-6-7 23:02
李培根 发表于 2013-6-7 21:18
就是integer的范围在128之内会复用的,内存中只存在一份。

传说中的培根斑竹呀
作者: 李阳阳    时间: 2013-6-7 23:49
话说这又扯出来一个享元模式、、、
作者: 刘学明       时间: 2013-6-7 23:53
享元模式啊




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