public class test4 {
public static void main(String[] args) {
String a = fuse("a", "");
String b = fuse("a", "");
System.out.println(a == b);
String c = "a"+"";
String d = "a"+"";
System.out.println(c == d);
String e = fuse("a");
String f = fuse("a");
System.out.println(e == f);
}
static String fuse(String t1)
{
return t1;
}
static String fuse(String t1,String t2)
{
return t1+t2;
}
}
運行結果:
false
true
true
為什麼是這個答案???
1.編譯優化
2.字符串池
c和d變量在編譯時就已經將值計算完畢了;
也就是說c,d,e,f這幾個都是一樣的地址;
a,b兩個變量因為需要調用方法,所以沒辦法編譯時計算;
調用方法後,t1+t2是產生了一個新的字符串對象,並且沒在池中;所以a和b兩次產生的對象的引用地址是不相同的;
如果你用equals的話,那麼所有都相同;
希望能夠幫到你....