簡體   English   中英

為什么不能使用String初始化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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM