StringBuilder sb = "asd";
在Java中,這種說法顯然是錯誤的。像Eclipse的IDE會告訴你:爲什麼不能使用String來初始化一個StringBuilder對象?
無法從字符串轉換成StringBuilder的
然而,String
對象可以通過=
操作進行初始化。
我想知道與內存分配相關的一些原因。
StringBuilder sb = "asd";
在Java中,這種說法顯然是錯誤的。像Eclipse的IDE會告訴你:爲什麼不能使用String來初始化一個StringBuilder對象?
無法從字符串轉換成StringBuilder的
然而,String
對象可以通過=
操作進行初始化。
我想知道與內存分配相關的一些原因。
因爲StringBuilder
是一個對象,它需要被構造。你收到錯誤,因爲字符串是而不是 a StringBuilder
。
字符串是一個特殊的,它被設計爲在原始和類之間。您可以將字符串直接分配給String變量,而不是調用構造函數來創建String實例。
的Java的設計者決定在 面向對象的語言,保留原始類型,而不是讓所有的對象,所以 ,以提高語言的表現。基元被存儲在調用堆棧中的 ,其需要更少的存儲空間並且更便宜地操作。另一方面,對象存儲在程序堆 中,這需要複雜的內存管理和更多的存儲空間。
出於性能方面的原因,Java的字符串被設計成一個 原始和類之間是英寸
更多讀數:
"xxx"
由語言*的說明書中定義爲a String literal和是一個字符串對象。所以,你可以寫:
String s = "abc"; //ok we got it
Object o = "abc"; //a String is an Object
CharSequence cs = "abc"; //a String is also a CharSequence
但字符串不是一個StringBuilder ...
*從JLS名言: 「一個字符串文字總是String
類型的」
StringBuilder是一個對象不是包裝器。
這工作
String sb = "asd";
,因爲你必須字面被分配給一個變量引用一個字符串的引用。即類型是相同的。
你不能這樣做隱式地轉換類型或用Java中的賦值來改變對象。
Object o = "asd";
因爲字符串是對象而工作。
字符串不僅是一個類,但""
中的任何內容都是JVM字符串和字符串對象是指該字符串。
所以String str="hello"
的作品。
但是StringBuilder和其他數以千計的對象並不像String
那樣特別,所以它們不會被同樣初始化。
Java中的String是一個特殊類型類U可以定義對象的字符串像
String s = "xyz";
或
String s = new String("XYZ");
但StringBuilde ** r是就像一個**正常類,當你必須爲它創建一個對象時,你應該使用新的關鍵字(構造對象)。 HTH
'StringBuilder sb = new StringBuilder(「asd」);' – sp00m