在正常的内存和字符串池创建新的字符串[复制](Create New Strings in norma

2019-10-21 00:10发布

这个问题已经在这里有一个答案:

  • 什么是Java串池,以及如何为“S”的新的String(“S”)有什么不同? [重复] 5个答案

例如,如果:

String str1 = “abc”;
String str2 = new String(“def”);

然后,

案例1: String str3 = str1.concat(str2)将在堆或游泳池去?

案例2: String str4 = str2.concat(“HI”)将在堆或游泳池去?

Answer 1:

在java中,无论字符串ü创建使用将在堆内存中创建新的关键字。 如果不使用新创建所有的字符串,它会在字符串池中创建的,它会被称为字符串常量。 将只有一个字符串常量池的值的副本,这意味着不会重复在那里的字符串池。



Answer 2:

在所述第一语法(String str1 = "abc";)创建仅一个字符串对象,并一个参考变量指向它。 该目的是通过在维持JVM字符串常量池创建的。 在第二种情况下String str2 = new String("def"); ,创建了两个String对象。 由于新的被调用,在正常的内存中创建一个String对象。 此外,字符串常量“newstring”将被放置在字符串常量池。

所以,当我们没有新的关键字,我们只需要一个String对象的字符串常量池的创建。



文章来源: Create New Strings in normal memory and in string pool [duplicate]