gpt4 book ai didi

java - 以下声明的差异

转载 作者:行者123 更新时间:2023-12-01 06:38:09 28 4
gpt4 key购买 nike

我无法识别以下 Java 中字符串声明的差异。

假设我有两个字符串

String str1="one";
String str2="two";

有什么区别

String str3=new String(str1+str2);

String str3=str1+str2;

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

假设我创建一个新字符串

String str4="onetwo";

然后在上述任何声明中,

if(str4==str3) {
System.out.println("This is not executed");
}

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

最佳答案

str1 + str2 对于非编译常量字符串将被编译成
new StringBuilder(str1).append(str2).toString()。此结果不会被放入或从字符串池(内部字符串所在的位置)中获取。

如果是 "foo"+"bar" ,情况就不同了,编译器知道他使用哪些值,因此他可以连接这个字符串一次以避免在运行时出现这种情况。这样的字符串文字也将被保留。

因此 String str3 = str1+str2;

相同
String str3 = new StringBuilder(str1).append(str2).toString();

String str3 = new String(str1+str2);

相同
String str3 = new String(new StringBuilder(str1).append(str2).toString());

同样,作为方法结果生成的字符串(如 substringreplacetoString)不会被保留。
这意味着您正在比较两个不同的实例(存储相同的字符),这就是 == 返回 false 的原因。

关于java - 以下声明的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com