对字符串有一些疑问,
我根据网上各种文章的理解写这篇文章,有些说法可能有误,请多多包涵。
当我们做 String str1 = new String ("newStr1"); . 这将创建 2 个字符串对象。一个在常规堆中,另一个在字符串池中。为什么 2 个对象及其用法?为什么不只是一个在游泳池?
如果我们将对象创建为String str2 = new String("newStr2").intern(); . 这将检查池中是否存在类似(有意义相等)的对象,并提供对它的引用。如果没有,它会在池中创建一个,而不是在堆中?如果是这样,那么我们应该大部分时间使用实习生来节省内存吗?尽管它会稍微影响性能。所以基本上它是String str2 = "newStr2"; (对于字符串文字来说,interning 是隐式的)
在 Java-6 之后,字符串池从 perm gen 空间移动到堆区域?所以基本上我们现在只有一个区域作为堆,还是字符串池现在作为堆中的一个单独部分?如果它不是一个单独的部分,那么仍然会创建 2 个对象吗?