由於字符串在Java中是不可變的,我爲什麼要使用無參數的String構造函數並創建一個對象?在Java中,是String s = new String()有沒有用?
如何對我有用的變量s
我這樣做後:
String s = new String();
由於字符串在Java中是不可變的,我爲什麼要使用無參數的String構造函數並創建一個對象?在Java中,是String s = new String()有沒有用?
如何對我有用的變量s
我這樣做後:
String s = new String();
new String()
是一個空字符串。這可能是一個方法的返回值,例如,如果你沒有更有意思的返回值。使用文字""
可能會更好,因爲文字空字符串值已經被執行。
它是一個空字符串,相當於""
。從javadoc:
初始化一個新創建的String對象,以便它表示一個空的字符序列。請注意,由於字符串是不可變的,因此不需要使用此構造函數。
編輯:使用這個詞相當於的
選擇不當。爲了澄清以下所有的true
:
"" == ""
"" != new String()
"".equals(new String())
由於字符串在Java中是不可變的,我爲什麼要使用參數較少String構造,並創建一個對象?
的唯一原因是,如果你想創建一個字符串,這是equal
到""
但不等同於它。即使如此,它更可能是你打電話new String(str)
其中str
指的是一個空字符串。
構造函數提供的真正原因尚不完全清楚。然而它並沒有什麼壞處,並且在開始時可能有一些原因(在Java被稱爲Java之前)。
有趣的事實:.NET沒有這種形式(no-arg字符串構造函數) – 2012-03-11 00:08:07
@pst - 只有在您認爲這是一個有趣的問題時纔有意思。我的觀點是,從實際的角度來看,無處不在的方法/構造函數的存在(或不存在)是無關緊要的。 – 2012-03-11 02:50:04
@StephenC:我發現無用的方法或構造函數會分散注意力。當我看到一個新的API時,我希望它儘可能簡單。無用的方法讓我閱讀更多的文檔,我必須決定*不*使用它們。 – 2012-03-11 15:00:47
「等值」...但「相同」? 'new String()==「」'? – 2012-03-11 00:10:07
@pst'new String()==「」'將會是false。他們不代表相同的對象,因爲字符串對象不是來自實習生池。 – Jivings 2012-03-11 02:13:40