這與以下內容有什麼不同?
這裏這行代碼:
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
構造一個新的String對象(即的oldString
副本),而這行代碼:
String newString = oldString;
聲明的一個新變量鍵入java.lang.String
並將其初始化爲指向與變量oldString
相同的String對象。
是否有任何情況下兩條線會有不同的輸出?
絕對:
String newString = oldString;
boolean isSameInstance = newString == oldString; // isSameInstance == true
與
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
// isSameInstance == false (in most cases)
boolean isSameInstance = newString == oldString;
a_horse_with_no_name(見註釋)是正確的,當然。的
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
相當於是
String newString = new String(oldString);
減的細微差別WRT彼得Lawrey解釋了他的答案編碼。
嗯,當然,*一個*不同的是,'字符串newString = oldString;',你仍然只有字符串的一個副本(你只是指向它來自兩個變量)。解碼/編碼會對字符串進行*複製*。這並不重要,因爲'String'是不可變的。儘管這可能不是爲什麼舊代碼是這樣的; 'String'有更直接的克隆方式('String(String)')。除了測試String類的編碼/解碼方法之外,我想不出爲什麼要進行編碼/解碼。 – 2012-01-13 16:48:47
上下文是否給出了爲什麼字符串轉換可能已經或者有必要的暗示? – 2012-01-13 16:52:22
@ T.J.Crowder:+1,當然!我並不是指實際對象中的差異。感謝您指出了這一點。 – OceanBlue 2012-01-13 18:14:27