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

cha*_* ro 7 java stringbuilder

StringBuilder sb = "asd";
Run Code Online (Sandbox Code Playgroud)

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

无法从String转换为StringBuilder

但是,操作员String可以初始化对象=.

我想知道一些与内存分配有关的原因.

Mar*_*oun 10

因为StringBuilder是一个对象而且需要构造它.你得到的错误,因为字符串是不是一个StringBuilder.

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

1个有趣的话题:

Java的设计者决定将原始类型保留在面向对象的语言中,而不是将所有东西都作为对象,从而提高语言的性能.基元存储在调用堆栈中,这需要较少的存储空间并且操作起来更便宜.另一方面,对象存储在程序堆中,这需要复杂的内存管理和更多的存储空间.

出于性能原因,Java的String设计在原语和类之间.

更多阅读:

  • -1 String也是一个对象,区别在于它是不可变的并支持重载的"="运算符.不多也不少. (2认同)

ass*_*ias 9

"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
Run Code Online (Sandbox Code Playgroud)

但是String不是StringBuilder ......

*来自JLS的引用:"字符串文字总是类型String"