怎么理解包装类装箱中的内存地址问题如下?
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
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
2016-10-31
你的代码我运行了一遍,但是返回的却是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左右,版本过低很多功能不支持,可能会跑出错误的结果误导人。
祝好。
举报