dra*_*ius 16 java string static initialization
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;
}
}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,它在任何地方都应该产生"en,en,en".
结果:"en,null,en"
预期:"en,null,null"(因为我发现静态命令实际上很重要)
有人可以解释一下吗?"en"和new String("en")有什么不同?
Boz*_*zho 19
是.在调用方法时,str2尚未初始化(字段按声明顺序初始化),str3是编译时常量.
编译时常量由类文件中的编译器内联.new String("..")不是常量,因为它使用构造函数.
字符串常量由字符串文字定义:"",它们放在jvm实例的字符串池中,以便重用它们.与此相反,使用新的String(..)会创建一个新实例,因此应该避免使用.
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |