爲什麼這種說法是不好的做法:爲什麼字符串對象實例化是一個壞習慣?
String colour= new String("Blue");
,並與這一說法有什麼
String colour="Blue";
爲什麼這種說法是不好的做法:爲什麼字符串對象實例化是一個壞習慣?
String colour= new String("Blue");
,並與這一說法有什麼
String colour="Blue";
首先是氣餒,因爲它讀取來自String
實習生池String
差異,然後實例化一個新的對象實例。上String interning維基百科文章說(部分)
在計算機科學中,串實習是僅存儲一個每個不同的字符串值,它必須是不可變的副本的方法。實習中的字符串使得一些字符串處理任務更具時間效率或空間利用效率,這是以創建或實施字符串時需要更多時間爲代價的。不同的值存儲在字符串實習生池中。
第二個示例從intern池中分配對String
的引用。
編譯器是否不對其進行優化使其運行相同? – MrMadsen
@MrMadsen號你會得到一個新的對象引用。 '「藍色」!=新字符串(「藍色」)' –
確實,JLS >>確保<<它將成爲新的對象引用......如果有任何可能,您可以觀察到這一點。 (使用'!='進行測試是觀察它的一種方法...) –
您正在創建一個不必要的String對象。
String colour= new String("Blue");
「藍色」已經是字符串類型。
可能相關:[String object instantiation](http://stackoverflow.com/q/16742819)。 – jww
*「爲什麼這種說法是不好的做法」* - 一個原因是它是毫無意義的。就像你的代碼中關於你喜歡的顏色的註釋一樣。 –
這是因爲String的不變性。有關更多信息,請參閱本教程http://www.javahelps.com/2015/03/immutability-of-string.html – Gobinath