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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Ricky_Nick 中级黑马   /  2014-4-21 12:04  /  1170 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(刚刚发的关于这个问题贴,内容没有全部显示出来,再发一次)
看看以下代码:
我们知道在定义a,b,x,y,时,基本数据类型有自动装箱的功能,
就例如Integer a=140; 就相当于Integer a=new Integer(140);
所以a==b为false都能理解
另外我们知道,如果数值范围在byte范围内,创建Integer对象时,不会开辟新的空间,而是指向已有的同一个对象
所以x==y为true也能理解

但是,既然Integer a=140; 就相当于Integer a=new Integer(140)
那么m==n的结果和x==y的结果就应该相同才对,
为什么会不同?
求对基本数据类型包装类理解比较透彻的朋友帮忙解释一下。。。。。


  • Integer a=140;
  • Integer b=140;
  • Integer x=100;
  • Integer y=100;
  • System.out.print("a==b:"+a==b);//___________false
  • System.out.print("x==y:"+x==y);//___________true
  • Integer m=new Integer(100);
  • Integer n=new Integer(100);
  • System.out.print("m==n:"+m==n);//__________false


5 个回复

倒序浏览
你这个是显示的开辟了空间,你就是传入1,他还是false,因为地址不同!
回复 使用道具 举报
只要new就是创建对象,地址就不同了
回复 使用道具 举报
为了优化,虚拟机为包装类提供了缓冲池,Integer池的大小-128~127 一个字节的大小;

Integer m=new Integer(100);
Integer n=new Integer(100);
System.out.print("m==n:"+m==n);//__________false   因为 m和n是两个不同的对象 ,==比较的是两个数的地址 所以 返回false

Integer x=100; Integer y=100;
实际上调用的是Integer.valueOf(int x); 和 Integer.valueOf(int y)
因为从-127到128之间的Integer数,Java在Integer中有事先缓存好的原型对象,每次返回的都是同一个Integer对象,只有不在这个范围的数才会new出一个Integer. 所以 返回的是 true
回复 使用道具 举报
本帖最后由 陈文怀 于 2014-4-21 14:27 编辑

画了个图,希望有助于你理解,看视频应该讲的很明白了!
Integer m = 100;
Integer n = 100;
会先判断m是否在-128到127这个范围,在的话,会到缓存空间按角标取对应的值.
Integer m = new Integer(100);
Integer n = new Integer(100);
这两个肯定会在堆中开辟新空间的,只要new.

QQ截图20140421141840.jpg (88.26 KB, 下载次数: 8)

QQ截图20140421141840.jpg
回复 使用道具 举报
解释如下:

1.Integer a=140;
2.Integer b=140;
3.Integer x=100;
4.Integer y=100;
5.System.out.print("a==b:"+a==b);//___________false
6.System.out.print("x==y:"+x==y);//___________true//知识点:享元模式
//装箱过程,一个字节之内(-128~127)之间的数字
//包装为一个Integer对象后缓存在池里,下次再有就直接从池里查找。
//这种设计模式叫做 享元模式(flyweight)——当很多很小的对象,它们有很多属性相同,就将它们变成一个对象,不同的地方变成方法的参数传入。
7.Integer m=new Integer(100);
8.Integer n=new Integer(100);
9.System.out.print("m==n:"+m==n);//__________false//创建m,n两个对象,地址值不同


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马