404*_*und 5 java string string-concatenation
我知道这可能很基本,也可能很直接,但我无法清楚地理解在这种情况下会发生什么,所以,就这样吧。
在以下代码中:
String str1 = "Hello";
String str2 = "World";
String str3 = new String("HelloWorld");
String str4 = str1 + str2;
Run Code Online (Sandbox Code Playgroud)
我知道 str1 和 str2 将在String Constant Pool内分别创建一个对象“Hello”和“World” 。对于 str3,在String Constant Pool外部创建了一个新对象,该对象指向在String Constant Pool内部创建的“HelloWorld” 。
我的问题是,如果我连接 2 个或更多字符串(使用 '+' 或 concat() 方法)会发生什么?
是否会像String str3一样在池外创建一个新对象,或者 str4 将直接指向String Constant Pool内的对象“HelloWorld”
PS:如果它是在池外创建新对象的情况,那么不使用new关键字如何发生?
首先,String s = new String("abs");它将创建两个对象,一个对象位于池区域,另一个对象位于非池区域,因为您使用 new 以及字符串文字作为参数。
String str1 = "Hello";
String str2 = "World";
String str3 = new String("HelloWorld");
String str4 = str1 + str2;
Run Code Online (Sandbox Code Playgroud)
到目前为止,您已经有 5 个 String 对象,其中 4 个位于字符串常量池中,1 个位于堆中。所以你的 str4 是字符串池中的一个新对象,也请检查下面的代码,
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.
Run Code Online (Sandbox Code Playgroud)
用于测试
System.out.println(str3==str4); //false
System.out.println(str4==str5);//false
System.out.println(str5==str6);//true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4681 次 |
| 最近记录: |