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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 耿明明 于 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:}详细一点啊,我的理解能力有限!!

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 加油

查看全部评分

12 个回复

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

这是笔记,希望对你有点帮助。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
于腾飛 发表于 2013-6-7 21:18
包装类的自动装箱和自动拆箱,超出BYET的取值范围就重新分配空间,所以第一个是两个对象,第二个都指向一个 ...

:handshake受教了,谢谢
回复 使用道具 举报
李培根 发表于 2013-6-7 21:18
就是integer的范围在128之内会复用的,内存中只存在一份。

虽然有点笼统,不过还是感谢!!:handshake
回复 使用道具 举报
Integer类型包装类当中,如果取值范围在byte(-128~127)内,JVM就不在进行开辟空间,目的是为了节省节省内存空间.
这个也是设计模式中的一种,享元模式.

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 享元模式 完全正确

查看全部评分

回复 使用道具 举报
陈志强 发表于 2013-6-7 21:20
为什么前面的返回true而后面的运算返回false呢?
对于基本数据类型的整数,装箱成Integer对象时,如果该数 ...

感谢:handshake
回复 使用道具 举报
本帖最后由 王林涛 于 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将不再开辟新的内存空间.


评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 花心々小土豆 于 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的区域。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 享元模式

查看全部评分

回复 使用道具 举报
李培根 发表于 2013-6-7 21:18
就是integer的范围在128之内会复用的,内存中只存在一份。

传说中的培根斑竹呀
回复 使用道具 举报
话说这又扯出来一个享元模式、、、
回复 使用道具 举报
享元模式啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马