一个基本问题关于引用的
问:
int a = 1;
Integer b = new Integer(1);
System.out.println(a==b);
结果为什么是true
但是
String c = "abc";
String d = new String("abc");
System.out.println(c == d);
结果就是false了?
请说一下具体的原因
?
?
答:
==在java中的作用是比较,比较的是左右两个操作数的“直接值”,所谓直接值,对基本类型而言就是其值本身,比如int a = 1,就是1;对引用类型而言,就相当于“内存地址”,引用对象内部所包含的内容(比如String的字符串)不是它所关心的。
Integer对象有在一定范围内自动拆箱概念,为什么会自动拆箱,可能认为这类数值型对象更多的使用价值是其数值内容,而非对象地址,为更实际方便使用。
String对象有intern(internalize)概念,是为了节省空间,同样内容的String对象只需一个内存实例即可,防止堆中出现过多相同内容的String对象造成使用上的浪费。String c = "abc"; 这样定义是liternal string,天生就是interned的。
?
http://topic.csdn.net/u/20120515/09/429f3b13-ec97-41ba-a869-9ef831e2d1d4.html?seed=577676173&r=78564159#r_78564159