6

如果它可以启动

String s = "Hello";

那为什么它是一个类?参数在哪里?

4

5 回答 5

12
String s = "Hello"; 

只是语法糖。它实际上是作为引用类型实现的。(它是一个不可变的引用类型,所以你不能改变它)

于 2012-10-03T21:55:54.847 回答
12

鉴于这String是一个如此有用且经常使用的类,它有一种特殊的语法(通过字符串文字表示:内部的文本"")来创建它的实例,但在语义上这两者是等价的:

String s = "Hello"; // just syntactic sugar
String s = new String("Hello");

在幕后,这两种形式并不是100% 等效的,因为 using 的语法""试图重用 Java 字符串池中的字符串,而显式实例化new String("")总是会创建一个新对象。

但请不要误会,任何一种语法都会产生对对象实例的引用,字符串在 Java 中不被视为原始类型,并且是类的实例,就像其他任何语法一样。

于 2012-10-03T21:57:35.393 回答
7

来自Java 规范的 §4.3.3

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

§3.10.5 开始

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

于 2012-10-03T21:56:40.867 回答
2
String s = "Hello";

JVM 将其视为:

String s = new String("Hello");并将其实习到String池中作为String文字。

于 2012-10-03T21:56:41.760 回答
0

您在示例中的行是创建一个 String 对象。没有您正在考虑的传统意义上的任何参数。

于 2012-10-03T21:55:37.033 回答