StringBuilder sb = "asd";
在Java中,这种说法显然是错误的。像eclipse这样的IDE会告诉你:
无法从String转换为StringBuilder
但是,String
运算符可以初始化=
对象。
我想知道与内存分配相关的一些原因。
答案 0 :(得分:10)
因为StringBuilder
是一个对象,需要构造它。您收到错误是因为String 不 a StringBuilder
。
String是一个特殊的,它设计在原始和类 1 之间。您可以将字符串文字直接分配给String变量,而不是调用构造函数来创建String实例。
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