为什么不能使用字符串初始化StringBuilder对象


StringBuilder sb = "asd";

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

无法从字符串转换为StringBuilder

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

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

因为StringBuilder是一个Object,需要构造它。您收到错误是因为String是而不是StringBuilder

字符串是一个特殊的,它被设计为介于基元和类1之间。您可以将字符串文本直接分配到string变量中,而不是调用构造函数来创建string实例。

1有趣的主题:

Java的设计者决定在面向对象语言,而不是将所有东西都作为对象,因此以提高语言的性能。存储基本体在调用堆栈中,这需要更少的存储空间并且更便宜操纵。另一方面,对象存储在程序中堆,这需要复杂的内存管理和更多的存储空间。

出于性能原因,Java的String被设计为介于基元和一个类。

更多阅读:

  • JLS
  • Java教程

"xxx"根据语言*的规范定义为字符串文字,字符串对象。所以你可以写:

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的报价:";字符串文字总是CCD_ 6"类型

StringBuilder是一个对象,而不是包装器。

这适用于

String sb = "asd";

因为您有一个对String文本的引用,该文本被分配给变量引用。即类型是相同的。

在Java中,您不能隐式地转换类型或通过赋值来更改对象。

Object o = "asd";

之所以有效,是因为字符串是一个对象。

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

但是StringBuilder和其他成千上万的对象并不像String那样特殊,所以它们也不会被初始化。

在java中,String是一种特殊类型的类u可以像一样为String定义对象

String s = "xyz";

String s = new String("XYZ");

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

最新更新