这个问题已经在这里有一个答案:
- 什么是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”)
将在堆或游泳池去?
这个问题已经在这里有一个答案:
例如,如果:
String str1 = “abc”;
String str2 = new String(“def”);
然后,
案例1: String str3 = str1.concat(str2)
将在堆或游泳池去?
案例2: String str4 = str2.concat(“HI”)
将在堆或游泳池去?
在java中,无论字符串ü创建使用将在堆内存中创建新的关键字。 如果不使用新创建所有的字符串,它会在字符串池中创建的,它会被称为字符串常量。 将只有一个字符串常量池的值的副本,这意味着不会重复在那里的字符串池。
在所述第一语法(String str1 = "abc";)
创建仅一个字符串对象,并一个参考变量指向它。 该目的是通过在维持JVM字符串常量池创建的。 在第二种情况下String str2 = new String("def");
,创建了两个String对象。 由于新的被调用,在正常的内存中创建一个String对象。 此外,字符串常量“newstring”将被放置在字符串常量池。
所以,当我们没有新的关键字,我们只需要一个String对象的字符串常量池的创建。