黑马程序员技术交流社区

标题: 关于Integer的问题 [打印本页]

作者: 在乎..    时间: 2013-7-14 16:35
标题: 关于Integer的问题
本帖最后由 在乎.. 于 2013-7-15 20:34 编辑

     public static void main(String[] args) {               Integer nm=null;
                 Integer wn=null;
                 System.out.println(nm==wn); //为什么返回是true,不是两个不同的对象吗?
               Integer num5 = 320;
               Integer num6 = 210;  
               System.out.println(num5 == num6);  //这些没有缓存的返回了false,那些缓存的是因为什么返回true的,不是两个不同的对象吗?

        }


作者: 在乎..    时间: 2013-7-14 16:44
System.out.println(num5 == num6);  //这些没有缓存的返回了false,那些缓存的是因为什么返回true的,不是两个不同的对象吗?
这个我明白了,原来是用到了享元模式,即把-128-127的相同的东西变成一个对象来使用,但第一个问题还没有解决?
作者: 王中伟    时间: 2013-7-14 17:50
“A是B的子类,那么A[ ]的任何实例也是B[ ]的实例。”这句没错,代入
Integer是Object的子类,那么Integer[ ]的任何实例也是Object[ ]的实例。没错
但int是一个基本(也叫原始)数据类型,int不是Integer类。
原始数据类型需要被包装类型打包boxing, Java 第5版后支持自动打包auto-boxing
允许Integer i=5;而在早期的1.3或Java ME技术中这么写是非法的。
只能int i=5;
同理有了自动打包,新版才可能这么写 Integer i[]={1,2,3,4,5};
旧版必须Integer i[]={new Integer(1),new Integer(2),new Integer(3)}
作者: chslzj    时间: 2013-7-14 18:26
在乎.. 发表于 2013-7-14 16:44
System.out.println(num5 == num6);  //这些没有缓存的返回了false,那些缓存的是因为什么返回true的,不 ...

因为他们都指向了同一个地址null,你没有用new 方法新建对象,所以他们指向了同一个地址 null,如果你是用
new Integer()方法来创建一个对象的话,结果就是false了
作者: a767175432    时间: 2013-7-14 18:56
因为 null换句话说也是一个地址 所以返回true
作者: 牛海亮    时间: 2013-7-15 11:49
nm wn num5 num6 这些都是对象的引用。它们都存于栈内存中,存储的是一个对象在堆内存中的地址,nm和wn存储的内容一样,所以相等。num5和num6存储的内容不一样,所以不等,你看这样理解是不是好一些。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2