例如:
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 中,你使用 new 关键字创建的任何字符串都将在堆内存中创建。如果您在不使用 new 的情况下创建任何字符串,它将在字符串池中创建,并将被称为字符串常量。字符串常量池值只有一个副本,这意味着字符串池中不会有重复项。
在第一种语法(String str1 = "abc";)
中,只创建了一个 String 对象和一个指向它的引用变量。该对象是在 JVM 维护的 String 常量池中创建的。在第二种情况下String str2 = new String("def");
,创建了两个 String 对象。由于调用了 new,因此在普通内存中创建了一个 String 对象。此外,字符串常量“newstring”将被放入字符串常量池中。
因此,当我们没有 New Keyword 时,我们只需在 String 常量池中创建一个 String 对象。