为什么不能使用String初始化StringBuilder对象?

时间:2014-01-16 10:52:57

标签: java stringbuilder

StringBuilder sb = "asd";

在Java中,这种说法显然是错误的。像eclipse这样的IDE会告诉你:

  

无法从String转换为StringBuilder

但是,String运算符可以初始化=对象。

我想知道与内存分配相关的一些原因。

6 个答案:

答案 0 :(得分:10)

因为StringBuilder是一个对象,需要构造它。您收到错误是因为String a StringBuilder

String是一个特殊的,它设计在原始和类 1 之间。您可以将字符串文字直接分配给String变量,而不是调用构造函数来创建String实例。

1 interesting topic

  

Java的设计者决定保留原始类型   面向对象的语言,而不是使一切都成为一个对象,所以   至于提高语言的表现。存储基元   在调用堆栈中,它需要更少的存储空间并且更便宜   操纵。另一方面,对象存储在程序中   堆,需要复杂的内存管理和更多的存储空间。

     

出于性能原因,Java的String设计在a之间   原始和阶级。

更多阅读:

答案 1 :(得分:9)

"xxx"被语言*的规范定义为a String literal,而一个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类型

答案 2 :(得分:1)

StringBuilder是一个不是包装器的对象。

答案 3 :(得分:1)

这有效

String sb = "asd";

因为您引用了分配给变量引用的字符串文字。即类型相同。

您不能隐式转换类型或使用Java中的赋值更改对象。

Object o = "asd";

可以工作,因为String是一个Object。

答案 4 :(得分:0)

String不仅是一个类,而且""内的任何内容都是JVM String,String对象引用该字符串。
所以String str="hello"有效。

但是StringBuilder和其他数千个对象并不像String那么特殊,所以它们也不会同样初始化。

答案 5 :(得分:0)

在java中,String是特殊类型的类你可以为String定义对象,如

String s = "xyz";

String s = new String("XYZ");

但是 StringBuilde **就像一个**普通类,当你必须为它创建一个对象时,你应该使用 new 关键字(构造对象) 。 HTH