考慮聲明一個String對象:創建的 「新」
一個String =新的String( 「ABC」);
該語句是否會創建兩個String對象,即「abc」和由's'表示的對象?
如果它創建兩個對象,然後將「abc」存儲在字符串池或只是丟棄?
編輯:
我問這個問題,參考Difference between string object and string literal,其中後兩個答案,兩個對象的創建被拒絕。
考慮聲明一個String對象:創建的 「新」
一個String =新的String( 「ABC」);
該語句是否會創建兩個String對象,即「abc」和由's'表示的對象?
如果它創建兩個對象,然後將「abc」存儲在字符串池或只是丟棄?
編輯:
我問這個問題,參考Difference between string object and string literal,其中後兩個答案,兩個對象的創建被拒絕。
避免這樣一種行爲,因爲已經是String
,並通過製作new String
,要創建一個不必要的Object
。
而是去String s = "abc";
這樣,String
得到由JVM實習,並加入到一個池。
要回答你的問題,你只是創建一個Object s
這是指。
所以,當你說String t = new String("abc");
,然後做s==t
,將產生在false
。因爲他們有不同的實例到abc
。
所以你的意思是'String s = new String(「abc」);'只會創建一個對象'而不是兩個對象'和'abc'? –
@aLearner當你說'「abc」'時,它已經是'String'('Object')。現在明白了嗎? –
我想你沒有得到我的問題。 「abc」總是表示一個String對象,並將存儲在String池中。沒關係。但是我問,上面的語句還會在String池中存儲一個新的對象「abc」,除非創建's'。 –
String s = "HELLO";
這裏「s」爲String類型,它指的是字符串文字對象「你好」其被添加到字符串文字池的一個對象引用變量。
String t = new String("Hello");
這裏t是String類型,其是指被添加到字符串池中字符串對象「你好」的一個對象引用變量。
Difference Between String Literal and String :
假設
的String = 「你好」;
String t = new String(「Hello」);
現在,如果進行了以下更改:
s = null;
t = null;
與T有關的將是垃圾收集與S相關的不會是一個垃圾收集候選人人選,但 你好字符串文字你好String對象,一樣會有ALWAYS BE A REFERENCE FROM STRING LITERAL POOL to it.
t不指向「你好」(文字)。 – assylias
'這裏t是String類型的對象引用變量,它引用了添加到字符串池的String對象「Hello」。 - 我認爲't'不會將字符串對象指向池中的字符串對象由'new'創建的永遠不會指向池中的字符串,除非通過intern() –
那麼,發生了什麼事時,你試過了嗎? (查找「Java string ==」的問題,因爲大多數[更好的]答案都應該討論'new String'。請注意,字符串文字是一個字符串文字,不管什麼「使用」它。 – 2012-06-23 06:54:58