为什么s1和s2指向同一个对象,而s1和s3没有指向同一个对象?(没有使用new关键字)。
因为串联发生在编译时,所以完成的字符串因此与第一个示例相同地进入常量池。这是编译器“已知”的特例。这的确意味着,以这种方式在多行中连接的长字符串仍将获得与简单字符串常量相同的性能改进。
在第二个示例中,您将在运行时执行计算,因此它不会成为常量池的一部分。
但是请注意,在JLS中,字符串常量池中可以做什么和不能做什么的细节都是故意含糊的,因此不同的实现可能以不同的方式进行优化。它规定了一定的规则,以什么 有
在那里去,但不要依赖此行为是在不同的实现是一致的。



