黑马程序员技术交流社区
标题:
对于基本数据类型包装类的小疑惑点
[打印本页]
作者:
Ricky_Nick
时间:
2014-4-21 12:04
标题:
对于基本数据类型包装类的小疑惑点
(刚刚发的关于这个问题贴,内容没有全部显示出来,再发一次)
看看以下代码:
我们知道在定义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
作者:
曹冬明
时间:
2014-4-21 12:20
你这个是显示的开辟了空间,你就是传入1,他还是false,因为地址不同!
作者:
二小傻
时间:
2014-4-21 12:23
只要new就是创建对象,地址就不同了
作者:
tjsyj
时间:
2014-4-21 13:26
为了优化,虚拟机为包装类提供了缓冲池,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:21
本帖最后由 陈文怀 于 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, 下载次数: 11)
下载附件
2014-4-21 14:20 上传
作者:
李海霞java
时间:
2014-4-21 15:46
解释如下:
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两个对象,地址值不同
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2