为了账号安全,请及时绑定邮箱和手机立即绑定

怎么理解包装类装箱中的内存地址问题如下?

double a = 91.5;

double b=new Double(a);

double  c=a;

         System.out.println(b==a);
        System.out.println(c==a);
        System.out.println(b==c);

运行结果为true,true,false

正在回答

3 回答

你的代码我运行了一遍,但是返回的却是3个true。
可能你会觉得包装类对应的是对象,那么它和基本类直接进行==操作应该是false。这本身是没错的,但是问题在于,如果你的Java版本是1.5及以后,那么做比较时Java会进行自动拆箱操作,所以实质上变成了两个基本类型的比较,那么结果自然是true。参见以下代码:

double a = 9;
Double b = new Double(9); 
Double c = new Double(9);
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);

结果是true,true,false。最后那个相当于是两个对象的比较,没有拆箱操作,自然比较内存地址,那么自然就是错误的了。

另外学习Java最好还是把Java版本升到1.7左右,版本过低很多功能不支持,可能会跑出错误的结果误导人。

祝好。







1 回复 有任何疑惑可以回复我~
#1

Bourne4076356 提问者

非常感谢!
2016-11-23 回复 有任何疑惑可以回复我~

你的代码我运行了一遍,但是返回的却是3个true。

实际上,对于包装类和其对应的基本类型来说,在用==比较时只是在比较单纯的数值,并没有涉及内存地址的问题。


0 回复 有任何疑惑可以回复我~

Double g=new Double(91.5);
        System.out.println(g==a); 结果为true

我自己的理解是这儿的==只是比较值是否相同,b==c比较的是引用地址是否相同~

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

怎么理解包装类装箱中的内存地址问题如下?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信