Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不能使用字符串初始化StringBuilder对象?_Java_Stringbuilder - Fatal编程技术网

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

Java 为什么不能使用字符串初始化StringBuilder对象?,java,stringbuilder,Java,Stringbuilder,在Java中,这个语句显然是错误的。eclipse等IDE将告诉您: 无法从字符串转换为StringBuilder 但是,字符串对象可以由=运算符初始化 我想知道一些与内存分配相关的原因,因为它是一个对象,需要构造。出现错误是因为字符串是而不是StringBuilder 字符串是一种特殊类型,它被设计为介于基元和类1之间。您可以将字符串文字直接分配到字符串变量中,而无需调用构造函数来创建字符串实例 1: Java的设计者决定将基本类型保留在 面向对象的语言,而不是使一切都成为对象,所以 以提高语

在Java中,这个语句显然是错误的。eclipse等IDE将告诉您:

无法从字符串转换为StringBuilder

但是,
字符串
对象可以由
=
运算符初始化

我想知道一些与内存分配相关的原因,因为它是一个对象,需要构造。出现错误是因为字符串是而不是
StringBuilder

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

1:

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

出于性能原因,Java的字符串被设计为介于 原语和一个类

更多阅读:

“xxx”
由语言规范*定义,是字符串对象。所以你可以写:

StringBuilder sb = "asd";
但是字符串不是字符串生成器

*引自JLS:“字符串文字的类型总是
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
因为您有一个字符串文字的引用被分配给变量引用。i、 e.类型相同

在Java中,不能隐式转换类型或更改带有赋值的对象

String sb = "asd";

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

字符串不仅是一个类,而且
中的任何内容都是一个JVM字符串,
字符串对象引用该字符串。
所以
String str=“hello”
起作用了


但是StringBuilder和其他数千个对象不像
String
那样特殊,因此它们也不会被初始化。

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

Object o = "asd";


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

StringBuilder sb=新StringBuilder(“asd”)谢谢!这是因为
String
在Java中是特殊的,因此
=
操作符可以用来构造字符串对象吗?你能给我一个url链接或书籍参考来介绍更多关于Java中
String
的内容吗?@chainro你很受欢迎:)我刚刚发布了一个链接,可能会对你有所帮助。-1 String也是一个对象,不同之处在于它是不可变的,并且支持重载的“=”运算符。不多不少。@lukasz1985 Java中没有运算符重载。如果你再读一遍,你会注意到我没有说字符串不是对象。说某些东西“被设计成介于原语和类之间”和“介于原语和类之间”是有区别的
String s = "xyz";
String s = new String("XYZ");