public class Test {
private static final String str1 = new String("en");
private static Test instance = initInstance();
private static final String str2 = new String("en");
private static final String str3 = "en";
private Test() {
}
public static void main(String[] args) {
}
private static Test initInstance() {
instance = new Test();
System.out.println(str1 + ',' + str2 + ',' + str3);
return instance;
}
}
从理论上讲,到处都有静力学,它会导致“ en,en,en”。
结果:“ en,null,en”
预期:“ en,null,null”(因为我发现静态顺序实际上很重要)
有人可以解释一下吗?“ en”和新的String(“ en”)有何不同?
是。在您调用该方法时,str2尚未初始化(字段按声明顺序初始化),而str3是编译时常量。
编译时常量在类文件中由编译器内联。new String(“ ..”)不是常量,因为它使用构造函数。
字符串常量由字符串文字“”定义,并将它们放置在jvm实例的字符串池中,以便重复使用。与此相反,使用new String(..)创建一个新实例,因此应避免使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句