在我的编程类中,我们创建了一个类似于Java String类的类。现在,我们创建一个像这样的新对象:
MyString string = new MyString("Hello World");
哪个好,但是在Java中你可以像这样创建一个新的String对象:
String string = "Hello World";
有什么方法可以效仿吗?这不是人们称之为不可变的,你可以在创建对象后更改对象,并添加到对象上吗?
编辑: 显然我需要回到英语课。不可变的'Im'意味着'不'......哎呀,我的意思是可变的。
答案 0 :(得分:3)
“不可变”实际上与你所描述的相反;这意味着对象在创建后无法更改或添加到。
无论如何,这与不变性无关。没有办法模仿你自己的类的构造。字符串文字是该语言的简单骨骼规范的一部分。就像我们在Java中没有运算符重载(因此没有办法使编译器按照我们希望的方式解释+
),我们无法使编译器理解不同的文字集。他们就是这样。
我确信有一些很棒的方法可以修改JVM并创建自己的编译器来做你想做的事情,但是你不再使用Java了。
您可以在JLS 3.10或官方Oracle教程中了解更多关于文字的信息(String
为this one,this 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 ;
我认为这只是少数类型的特殊行为。可能是等于运算符过载。