小编典典

当我们使用+运算符进行连接时,新创建的String对象在哪里?

java

我知道这可能是很基本的,可能很简单,但是我无法清楚地了解在这种情况下会发生什么,所以就来了。

在下面的代码中:

String str1 = "Hello";
String str2 = "World";
String str3 = new String("HelloWorld");
String str4 = str1 + str2;

我知道,str1和str2的将分别创建一个对象的“Hello”和“世界” 里*字符串常量池的 。对于str3,在 字符串常量池
外部 创建一个新对象,该对象指向 字符串常量池 内部 创建的“ HelloWorld” 。 __
*__

我的问题是,如果我concat 2个或更多字符串( 使用’+’或concat()方法 )会发生什么?

将一个新的对象被创建 泳池中的情况下,就像 串STR3 或直接在对象的“HelloWorld” STR4点
字符串常量池的

PS:而且, 如果 情况类似于在池 创建新对象,那么不使用 new 关键字怎么办呢?


阅读 220

收藏
2020-11-01

共1个答案

小编典典

首先,String s = new String("abs");它将创建两个对象,一个在池区域中的对象,另一个在非池区域中的对象,因为您将使用new和字符串文字作为参数。

String str1 = "Hello";
String str2 = "World";
String str3 = new String("HelloWorld");
String str4 = str1 + str2;

到现在为止,您有五个String对象,其中四个在String Constant Pool中,另一个在Heap中。因此,您的str4完全是String
Pool中的一个新对象,请同时检查以下代码,

 String str5="HelloWorld"; //This line will create one more String Constant Pool object because we are using the variable name as str5.
 String str6="HelloWorld";////This line will not create any object, this will refer the same object str5.

进行测试

System.out.println(str3==str4); //false
System.out.println(str4==str5);//false
System.out.println(str5==str6);//true
2020-11-01