大家觉得下面代码结果是什么?以及为什么呢?public class Test {
public static void main(String[] args){
String a = "ja";
a += "va";
String b = "j";
b += "ava";
System.out.println(a==b);
}
}结果是false,但是Java中不是有机制,如果即将创建一个与堆中对象相等的对象,那么在栈中的引用都将指向同一个对象.
public static void main(String[] args){
String a = "ja";
a += "va";
String b = "j";
b += "ava";
System.out.println(a==b);
}
}结果是false,但是Java中不是有机制,如果即将创建一个与堆中对象相等的对象,那么在栈中的引用都将指向同一个对象.
http://topic.csdn.net/u/20090519/18/7b8cf7ef-bc06-4d26-8a2c-692eb0562231.html
运算不是在堆里进行得嘛
我认为
关于这里的false的原因:
a += "va";相当于a = a+ new String("va");
b += "ava";同上
也就是说
就算你在常量池有"java",你去new String("java");后者依然会被分配一个引用
只要引用不同,"=="比较就肯定是false
b+"ava"等同b=b+new String("ava");
由于new了,所以用==比较肯定是false
最后"java"字符串都在堆中,对吧?
既然都在堆中,那么2个引用其实指向的同一个对象.
既然是这样,你把我驳倒,然后说清楚点.别不清不楚的.