我知道这可能是很基本的,可能很简单,但是我无法清楚地了解在这种情况下会发生什么,所以就来了。
在下面的代码中:
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 关键字怎么办呢?
首先,String s = new String("abs");它将创建两个对象,一个在池区域中的对象,另一个在非池区域中的对象,因为您将使用new和字符串文字作为参数。
String s = new String("abs");
到现在为止,您有五个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