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");