创建并有机会从字符串池中创建一个 String 对象有什么意义
What's the point of creating and having an opportunity to create a String object out of string pool
我知道 String
对象是不可变的,我可以在堆 (String s1 = new String("text1"
) 和字符串池 (String s2 = "text2"
) 中创建 String
对象。那么有机会从字符串池中创建 String
有什么意义呢?为什么 Java 隐式地不在字符串池中创建所有 String
对象?如果可能存在一些稀有字符串,可能是为了防止处理器在字符串池中迭代?
如果从 new
运算符的角度来看它是有道理的。
new
总是 分配一个新对象。这适用于所有 classes,无一例外。它对 String
class 和任何其他 class 没有任何特殊情况行为。它完全 class 不可知。
我也不认为需要添加优化。写 new String("literal")
通常是一个错误。为什么要加速错误?
我知道 String
对象是不可变的,我可以在堆 (String s1 = new String("text1"
) 和字符串池 (String s2 = "text2"
) 中创建 String
对象。那么有机会从字符串池中创建 String
有什么意义呢?为什么 Java 隐式地不在字符串池中创建所有 String
对象?如果可能存在一些稀有字符串,可能是为了防止处理器在字符串池中迭代?
如果从 new
运算符的角度来看它是有道理的。
new
总是 分配一个新对象。这适用于所有 classes,无一例外。它对 String
class 和任何其他 class 没有任何特殊情况行为。它完全 class 不可知。
我也不认为需要添加优化。写 new String("literal")
通常是一个错误。为什么要加速错误?