Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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 为什么字符串是一个类?_Java_String_Syntax - Fatal编程技术网

Java 为什么字符串是一个类?

Java 为什么字符串是一个类?,java,string,syntax,Java,String,Syntax,如果它可以启动与公正 String s = "Hello"; 那为什么它是一门课?参数在哪里?示例中的行是创建字符串对象。没有任何传统意义上的参数是您所考虑的 String s = "Hello"; 只是语法上的糖。它实际上是作为引用类型实现的。(它是一个不可变的引用类型,因此您无法更改它)来自: 字符串文字是对类String实例的引用 和来自: 字符串文字是对类string JVM将其视为: String s=新字符串(“Hello”)并将其作为Stringliteral实习到Strin

如果它可以启动与公正

String s = "Hello";

那为什么它是一门课?参数在哪里?

示例中的行是创建字符串对象。没有任何传统意义上的参数是您所考虑的

String s = "Hello"; 
只是语法上的糖。它实际上是作为引用类型实现的。(它是一个不可变的引用类型,因此您无法更改它)

来自:

字符串文字是对类
String
实例的引用

和来自:

字符串文字是对类
string

JVM将其视为:


String s=新字符串(“Hello”)
并将其作为
String
literal实习到
String
池中。

鉴于
String
是一个非常有用且经常使用的类,它有一个特殊的语法(通过字符串文本表示法:在
中的文本)来创建其实例,但在语义上这两个是等效的:

String s = "Hello"; // just syntactic sugar
String s = new String("Hello");
在后台,这两种形式并不是100%等价的,因为使用
的语法试图重用Java字符串池中的字符串,而使用
新字符串(“”
的显式实例化将始终创建一个新对象


但请不要搞错,这两种语法都会产生对对象实例的引用,字符串在Java中不被视为基本类型,而是类的实例,就像其他任何类型一样。

这在技术上是不正确的,因为您的示例创建了两个
String
对象。@LanguagesNamedAfterCofee:不确定您的意思,你能说得更具体一点吗?这样我就可以更正我的答案了。我只是添加了第二行来说明内部发生了什么。我的回答没有说“Hello”不会用OP语法创建。它们不一样<代码>新字符串始终创建新字符串对象
s=“”
检查实习池并返回一个可能已经创建的字符串。您的问题已经有足够好的答案,只需注意一点:整数i=5;长l=6L;等等,而Integer肯定也是一个类。阿森科洛夫:他们的风格完全不同implemented@AssenKolov那么基本上,JVM魔术?不知道,,thanks@Steve:当然可以。请看问题:如果可以用这种方式实例化,为什么xxx是一个类。答案是:对于字符串、整数等,语法suger是正确的。字符串内部处理由语言和JVM(内部处理)处理<代码>整数i=5只是自动装箱(语言)。此外,
Integer.valueOf
进行一些轮询,但这是由
Integer
类处理的。我猜用户的最终结果是,它是语法上的糖。
String s = "Hello"; // just syntactic sugar
String s = new String("Hello");