https://juejin.cn/post/6930983856128557064
在 JDK1.6 中,常量池和堆是明显分隔的,JDK 1.7 之后,常量池放在堆上
intern()
找常量替代,修改成放在堆上的时候,省去了重新在常量池中建立一个新的常量的过程
但是在 22 版本中我没有看到这个的有力证据(可能又把这个 feature 去掉了罢
然后事实证明,如果
用 + 的时候实际上调用的是 StringBuilder
类来生成新的字符串,这个类的构造方法中使用的是 new
来构造,所以用 +
字符串拼接的时候实际上是在 new
的