Java 创建不可变对象,实例化时不使用新对象
我是否可以创建一个只使用Java 创建不可变对象,实例化时不使用新对象,java,string,object,instance,Java,String,Object,Instance,我是否可以创建一个只使用=操作符实例化的类,就像字符串那样?或者,Java中的“代码>字符串Stry< /Copy>类是特定的特性?< P>>强>否,不能创建创建一个仅用= /Cuth>运算符实例化的类,因为不能像Java或C++ java < /String >(参见)那样在java中加载运算符。 字符串仅当它们在内存中不存在时,才会在使用“某物”时被实例化,因此每次编写“某物”时,都会获得对相同的字符串对象的引用 例如,如果您这样做: String a=“某物”; 字符串b=“某物”; 然
=
操作符实例化的类,就像字符串那样?或者,Java中的“代码>字符串Stry< /Copy>类是特定的特性?< P>>强>否,不能创建<或强>创建一个仅用= /Cuth>运算符实例化的类,因为<强>不能像Java或C++ java < /String >(参见)那样在java中加载运算符。
字符串
仅当它们在内存中不存在时,才会在使用“某物”
时被实例化,因此每次编写“某物”
时,都会获得对相同的字符串
对象的引用
例如,如果您这样做:
String a=“某物”;
字符串b=“某物”;
然后
a==b;//这是真的。
您可以查看这些问题以了解有关String
对象如何工作的更多信息:
-
-
-
因为Java不支持用户定义的运算符重载无法使用=
运算符创建新实例
查看以了解更多信息CodeString s=“Hello World!”
不会创建新的字符串
。它将字符串池中存在的字符串的引用分配给s
。如果字符串池中不存在字符串
,则会在字符串池中创建一个新的字符串
对象,但不能单独使用操作符=
这将创建新的字符串对象:
String s1 = new String("Hello World!"); // new Object
String s2 = new String("Hello World!"); // new Object
System.out.println(s1 == s2); // false
这可能会也可能不会在字符串池中创建新的String
对象:
String s1 = "Hello World!";
String s2 = "Hello World!";
System.out.println(s1 == s2); // true
您可以使用<代码> GETStaseNo.()/Cuth>模式来比较上面提到的行为,考虑如下:
public class Singleton {
private Singleton(){}
private static class SingletonHelper{
private static final instance INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHelper.INSTANCE;
}
}
然后你可以使用:
Singleton s = Singleton.getInstance();
不,你不能。正如您所说,位于Java
中,字符串不是用=
实例化的。字符串常量是用“…”
定义的,从这里开始它只会变得更复杂。所以,不,你不能。使用new
。如果您不喜欢new
,您可以将其隐藏在静态工厂方法或类似的方法后面。我的意思是,如果我的类或“+=”旁边有“=”的话,我可以告诉Java该怎么做。我给String类举了一个例子。不是字符串类的内部。我通过使用用户定义的运算符重载来获得答案。谢谢大家。@matthew-Java实际上并没有对带有字符串的“=”执行任何特殊操作(它对“+=”执行特殊操作,但这只是因为它对“+”)具有特殊行为。第一个代码段不一定在字符串池中创建新的字符串(由新字符串(…)
创建的字符串不包含在该池中).@无论如何,你当然是对的,我的错,纠正了我的回答。