创建并有机会从字符串池中创建一个 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") 通常是一个错误。为什么要加速错误?