問題歸結爲以下代碼:Java字符串interning,什麼保證?
// setup
String str1 = "some string";
String str2 = new String(str1);
assert str1.equals(str2);
assert str1 != str2;
String str3 = str2.intern();
// question cases
boolean case1 = str1 == "some string";
boolean case2 = str1 == str3;
確實Java標準給予任何保證關於case1
和case2
值? 鏈接到Java規範的相關部分將是當然的不錯。
是的,我看着這麼發現所有的「類似的問題」,並沒有發現重複的,因爲沒有我發現回答了這個問題這樣。不,這是不是與==
更換equals
「優化」的字符串比較的誤導想法。
如果它不是一個無用的優化企圖,是什麼呢? –
@dystroy我有特定的情況下爲約標準化使用文件名進行同步,並且如果實習字符串是安全爲目的,或如果共享'地圖<字符串,對象>將需要fileNameToLockObjectMap'。不確定的是,我最終在這種情況下使用了一個Map(並且不會再改變)。 – hyde
鎖定字符串不是一個好主意。很可能你會有意想不到的後果。 –