黑马程序员技术交流社区
标题:
关于Integer的一个问题
[打印本页]
作者:
何伟
时间:
2012-12-30 21:28
标题:
关于Integer的一个问题
class IntegerDemo
{
public static void main(String[] args)
{
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1 == i2);
System.out.println(i3 == i4);
}
}
为什么第一个打印的是ture,而第二个打印的却是false,如果都是ture或都是false我还能理解,可是一个ture一个是false我是晕了
作者:
冉世友
时间:
2012-12-30 21:37
范围在-128到127之间的话就是true
其它数都是false
作者:
李敬卫
时间:
2012-12-30 21:43
如果值在-128~127时,java虚拟机会给你自动拆箱然后比较int类型的值,如果不在,那你就要手动拆箱或装箱做比较了
作者:
王钊
时间:
2012-12-30 21:44
Integer类有一个缓存,它会存取介于-128-127之间的整数。(你可以去看源代码就知道了)
也就是说,如果你在-128-127之间创建Integer对象的话,他会把缓存的整数直接拿出来给你用,不会创建新的对象,
所以你创建的i1和i2其实是Integer缓存中的同一个对象。
作者:
何伟
时间:
2012-12-30 22:19
谢谢各位啊。。。。。。。。。。。。。。。。。。。。。
作者:
王玮
时间:
2012-12-30 22:35
Integer类有一个缓存,它会存取介于-128-127之间的整数。 这楼上已经说过了。除此这外, 这是一种“享元模式” 除此次外,String还有一个线程池(栈)有同样功能。哈哈~
作者:
而今从头越2012
时间:
2012-12-31 12:41
如果你用了具体的基本类型int,而不是用了integer包装器来定义,那么其结果都是相等的。在JAVA中,根据规定,自动打包的规范要求是介于-128~127之间时,int会被自动包装到固定的对象中,因此,对于Integer,当你的值在-128~127之间进行比较时候才会自动转化为int类型,超出这个范围都不成立。
关于Integer包装类的注意,尽量少用包装器来定义,因为这样编译器要自动的转换,不仅麻烦而且浪费资源,包装器一般只有在定义泛型数组时候才使用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2