繁体   English   中英

Java String类在内部如何工作?

[英]How does the Java String class work internally?

在我的编程类中,我们正在创建一个类似于Java String类的类。 现在,我们创建一个像这样的新对象:

MyString string = new MyString("Hello World");

一切都很好,但是在Java中,您可以创建一个新的String对象,如下所示:

String string = "Hello World";

有办法模仿吗? 这不是人们所说的不可变的,您可以在创建对象后更改它并添加到该对象上吗?

编辑:显然我需要回到英语课。 “我”一词的不变是“不是”……糟糕,我的意思是可变的。

“不变”实际上与您所描述的相反。 这意味着对象在创建或添加后无法更改。

无论如何,这与不变性无关。 没有办法为您自己的类模拟这种构造。 字符串文字是该语言的基本内容的一部分。 就像我们在Java中没有运算符重载(因此也没有办法使编译器解释+我们希望的方式)一样,我们也没有办法使编译器理解一组不同的文字。 他们就是他们。

我敢肯定,有一些绝妙的方法可以修改JVM并创建自己的编译器以执行所需的操作,但是您实际上不再使用Java。

您可以在JLS 3.10或Oracle官方教程中了解更多有关文字的信息( String为实际基本类型)。

在Java中,字符串文字 String类的实例。 因此,在第二个示例中,没有任何转换发生。 它与不变性无关(但是如果Strings可变,您会遇到问题)。

编辑:要查看String类如何在内部工作,请查看其源代码 (OpenJDK)。

另一个例子

Integer Int = 5;

要么

Integer Int = new Integer (5);

两者都很好。

以下内容也适用。

 Integer Int;
 int i = 5;
 Int = i ;

我认为这是仅针对少数类型的特殊行为。 可能等于运算符被重载了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM