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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 在乎.. 中级黑马   /  2013-7-14 16:35  /  1644 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 在乎.. 于 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的,不是两个不同的对象吗?

        }

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
System.out.println(num5 == num6);  //这些没有缓存的返回了false,那些缓存的是因为什么返回true的,不是两个不同的对象吗?
这个我明白了,原来是用到了享元模式,即把-128-127的相同的东西变成一个对象来使用,但第一个问题还没有解决?
回复 使用道具 举报
“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)}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在乎.. 发表于 2013-7-14 16:44
System.out.println(num5 == num6);  //这些没有缓存的返回了false,那些缓存的是因为什么返回true的,不 ...

因为他们都指向了同一个地址null,你没有用new 方法新建对象,所以他们指向了同一个地址 null,如果你是用
new Integer()方法来创建一个对象的话,结果就是false了

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为 null换句话说也是一个地址 所以返回true
回复 使用道具 举报
nm wn num5 num6 这些都是对象的引用。它们都存于栈内存中,存储的是一个对象在堆内存中的地址,nm和wn存储的内容一样,所以相等。num5和num6存储的内容不一样,所以不等,你看这样理解是不是好一些。。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

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