黑马程序员技术交流社区
标题:
关于装箱和拆箱的小问题
[打印本页]
作者:
烟花雨
时间:
2013-10-24 19:55
标题:
关于装箱和拆箱的小问题
本帖最后由 烟花雨 于 2013-10-26 20:23 编辑
以下两种输出结果为何不同,困惑,求解答。。详细的
package it.cast.test;
public class AutoBoxDemo1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a=200;
Integer b=200;
if(a==b)
System.out.print("a==b");
else
System.out.print("a!=b");
}
}
//输出结果是:a!=b
package it.cast.test;
public class AutoBoxDemo1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a=100;
Integer b=100;
if(a==b)
System.out.print("a==b");
else
System.out.print("a!=b");
}
}
//输出结果是:a==b
作者:
寻丶丶觅
时间:
2013-10-24 20:14
当Integer a。当赋值为byte区间时-128~127指向的是同一个对象,超出这个区间就相当于两个对象了。
原理貌似是虚拟机中对-128~127底层是存在的,在此区间都指向同一个地址值。
因为超出那个范围,像你这样赋值属于两个对象,有两个地址值。跟String类是不同的。
作者:
月夜之鬼魅
时间:
2013-10-24 20:36
享元模式
flyweight
如果很多很小的对象,它们有相同的东西,那就可以把它们变成一个对象,把它们不同的东西变成外部的属性,作为方法的参数传入
整数:-128~127 使用的是享元模式
作者:
乔兵
时间:
2013-10-26 14:20
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续提问,谢谢合作
修改方法请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
作者:
麦子
时间:
2013-10-26 15:33
一针见血回答你问题
JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128,所以地址不一样。
作者:
0从谷0
时间:
2013-10-26 16:44
让享元模式在我们的代码中体现才是目的。
作者:
月夜之鬼魅
时间:
2013-10-26 19:11
享元模式
flyweight
如果很多很小的对象,它们有相同的东西,那就可以把它们变成一个对象,把它们不同的东西变成外部的属性,作为方法的参数传入
整数:-128~127 使用的是享元模式
作者:
云水禅心
时间:
2013-10-26 20:52
总结:1.5之后,不用new基本数据类型的对象,直接赋值给基本数据类型。
-128~127之间的数,被放到一个池子里,可以共享
将大量重复使用的元素,进行共享的模式,称为
“享元模式”。
元素中不同的部分,将作为方法的参数,进行操作
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2