Java String类如何在内部工作?

时间:2014-01-30 15:38:47

标签: java string immutability

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

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

哪个好,但是在Java中你可以像这样创建一个新的String对象:

String string = "Hello World";

有什么方法可以效仿吗?这不是人们称之为不可变的,你可以在创建对象后更改对象,并添加到对象上吗?

编辑: 显然我需要回到英语课。不可变的'Im'意味着'不'......哎呀,我的意思是可变的。

3 个答案:

答案 0 :(得分:3)

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

无论如何,这与不变性无关。没有办法模仿你自己的类的构造。字符串文字是该语言的简单骨骼规范的一部分。就像我们在Java中没有运算符重载(因此没有办法使编译器按照我们希望的方式解释+),我们无法使编译器理解不同的文字集。他们就是这样。

我确信有一些很棒的方法可以修改JVM并创建自己的编译器来做你想做的事情,但是你不再使用Java了。

您可以在JLS 3.10或官方Oracle教程中了解更多关于文字的信息(Stringthis onethis one为实际原始类型。

答案 1 :(得分:0)

在Java中,字符串文字String类的实例。所以在你的第二个例子中,没有发生转换。它与不变性无关(但如果字符串可变,你会遇到问题)。

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

答案 2 :(得分:0)

另一个例子

Integer Int = 5;

OR

Integer Int = new Integer (5);

两者都很好。

以下也适用。

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

我认为这只是少数类型的特殊行为。可能是等于运算符过载。