2011-06-24 35 views
7

我的看法是,直到今天,那文字像"c"創建String對象。今天我聽說Java沒有爲單個字符串創建一個對象。這是正確的嗎?它是否將該文字存儲爲char的單字符字符串

+3

聽說過嗎?聽說哪裏? – bmargulies

+0

這將是一個有趣的概念,將單字符字符串自動裝箱/取消裝箱到char字符...... – Nick

+0

告訴告訴你,要閱讀Java語言規範中關於文字的部分。字符文字和字符串文字:http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100960 –

回答

5

"c"String文字。它代表String,正如"foo"代表String

沒有特殊處理單字符String文字(甚至沒有0字母String文字"")。

誰告訴你,這是區別對待的是無論是。)錯誤或b。)談論不同的東西(有特殊處理庫,例如)。

8

"c"將創建一個字符串。 'c'將創建一個char

13

不,這是錯誤的。即使是"",也會創建一個String對象。 但是,如果您鍵入'c',則會得到一個字符而不是String對象。

6

即使對於單個字符串,Java也會創建一個字符串實例。下面的打印java.lang.String

public class Test{ 
    public static void main(final String[] args){ 
     System.out.println("c".getClass().getName()); 
    } 
} 
+0

是的,它顯然確實返回字符串,因爲'「」'(雙引號)是字符串和''''(單引號)用於字符 – Woot4Moo

1

"c"確實創建一個對象。但是,如果您在源代碼的某處再次分配文字,它將不會創建新對象,而是引用創建的第一個字符串對象。

例如:

String s1 = "abc"; //creates the String object 
String s2 = "abc"; //references the same object as s1 

S1和S2都被分配了相同的對象,和==會工作。

你可以在這裏閱讀更多:http://javatechniques.com/blog/string-equality-and-interning/

+0

錯誤。 ==只有在你使用String.intern – Woot4Moo

+0

@ Woot4Moo否的情況下才有效,這是真的。文字字符串是默認實現的。 – sfussenegger

+0

@ Woot4Moo請參閱https://gist.github.com/1044768 – sfussenegger

1

也許什麼意思是,在發動機罩下方flyweights創建(如何說不上來這工作與Java,但我相信,這個概念是在一定程度上爲字符串employeed)

+0

對於某些操作,即子字符串(..),subSequence(..)和trim(),其結果字符串將在引擎蓋下使用相同的char []。我不明白這可能會如何影響字符串文字。 – sfussenegger

0

String存儲字符作爲一個char[],因此最有可能"c"將被表示爲String對象內new char[] { 'c' }

由於String類是final,這意味着在char c字段中沒有存儲單字符字符串的子類。

另外,對於單字符Stringchar沒有自動裝箱/取消裝箱的概念 - 就文件而言,所以假定單字符字符串存儲類似於任何其他類型是安全的的字符串。

0

與編程看看源最多的事 - > java.lang.String中。

所有的字符串都是java.lang.String中的情況下,也沒有特殊的情況。每個java.lang.String都包含一個char []和一些整數來保存開始和結束索引。請注意,char []在Strign實例之間共享,例如在執行String.substring()時,原始char []未被克隆或複製,但共享但是開始/結束索引已更新。

相關問題