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"类型
这适用于
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-