以下声明中的差异

kev*_*mes 0 java string declaration string-concatenation

我无法识别以下Java中的字符串声明的区别.

假设我有两个字符串

String str1="one";
String str2="two";
Run Code Online (Sandbox Code Playgroud)

有什么区别

String str3=new String(str1+str2);
Run Code Online (Sandbox Code Playgroud)

String str3=str1+str2;
Run Code Online (Sandbox Code Playgroud)

在上述两个声明中,内容都str3将是onetwo.

假设我创建了一个新字符串

String str4="onetwo";
Run Code Online (Sandbox Code Playgroud)

然后,在上述声明中,

if(str4==str3) {
    System.out.println("This is not executed");
}
Run Code Online (Sandbox Code Playgroud)

为什么str3str4不是指同一个对象?

Psh*_*emo 5

str1 + str2对于非编译常量字符串将被编译成
new StringBuilder(str1).append(str2).toString().这个结果不会被放入,也不会从字符串池中获取(其中有实际的字符串).

"foo"+"bar"在编译器知道他使用哪个值的情况下,它是不同的故事,因此他可以将此字符串连接一次以在运行时避免它.这样的字符串文字也将被实习.

所以String str3 = str1+str2;和.一样

String str3 = new StringBuilder(str1).append(str2).toString();
Run Code Online (Sandbox Code Playgroud)

String str3 = new String(str1+str2);是一样的

String str3 = new String(new StringBuilder(str1).append(str2).toString());
Run Code Online (Sandbox Code Playgroud)

再次,字符串制造方法的结果(例如substring,replace,toString)不实习.
这意味着您要比较两个不同的实例(存储相同的字符),这就是==返回的原因false.


归档时间:

查看次数:

57 次

最近记录:

10 年,6 月 前