![](/img/trans.png)
[英]Why do it this way? (use string Namevaluepairs and StringBuilder)
[英]Why can not use a String to initialize a StringBuilder object?
StringBuilder sb = "asd";
在Java中,這種說法顯然是錯誤的。 像eclipse這樣的IDE會告訴你:
無法從String轉換為StringBuilder
但是, String
對象可以由=
運算符初始化。
我想知道一些與內存分配有關的原因。
因為StringBuilder
是一個Object,需要構造它。 您收到錯誤是因為String 不是 StringBuilder
。
字符串是一個特殊的,它設計在原始和類1之間。 您可以將字符串文字直接分配給String變量,而不是調用構造函數來創建String實例。
1個 有趣的話題 :
Java的設計者決定將原始類型保留在面向對象的語言中,而不是將所有東西都作為對象,從而提高語言的性能。 基元存儲在調用堆棧中,這需要較少的存儲空間並且操作起來更便宜。 另一方面,對象存儲在程序堆中,這需要復雜的內存管理和更多的存儲空間。
出於性能原因,Java的String設計在原語和類之間。
更多閱讀:
"xxx"
由語言*的規范定義為字符串文字 ,並且是 String對象。 所以你可以寫:
String s = "abc"; //ok we got it
Object o = "abc"; //a String is an Object
CharSequence cs = "abc"; //a String is also a CharSequence
但是String不是StringBuilder ......
*來自JLS的引用:“字符串文字總是String
類型”
StringBuilder是一個不是包裝器的對象。
這有效
String sb = "asd";
因為您有一個對分配給變量引用的字符串文字的引用。 即類型是相同的。
您無法隱式轉換類型或使用Java中的賦值更改對象。
Object o = "asd";
因為String是一個Object而工作。
String不僅是一個類,而且""
中的任何內容都是JVM String,String對象引用該字符串。
所以String str="hello"
有效。
但是StringBuilder和其他數千個對象並不像String
那么特殊,所以它們也沒有同樣初始化。
在java中,String是一種特殊類型的類,你可以為String定義對象
String s = "xyz";
要么
String s = new String("XYZ");
但是StringBuilde **就像一個**普通類 ,當你必須為它創建一個對象時,你應該使用new關鍵字(構造對象)。 HTH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.