【发布时间】:2015-05-25 18:00:29
【问题描述】:
我无法识别以下 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");
}
为什么str3 和str4 不是指同一个对象?
【问题讨论】:
-
不要使用
==比较字符串 -
@Apurva :我想比较对象,而不是字符串的内容。我想知道
str4和str3指的是哪里 -
这实际上是在比较引用,如果 str4 和 str3 将指向相同的位置,那么它将等于这里在不同的位置......而不是使用字符串的相等方法
-
Why and where str3 and str4 are referring to different location为什么你认为他们应该有相同的参考? -
@kevingomes "因为
String str3=str1+str2应该是实习生" 不,编译器无法确定非最终变量的值,因此无法连接它们在编译时,就像在"foo"+"bar"的情况下可以做的那样并实习。它将编译成new StringBuilder(str1).append(str2).toString(),这个结果不会被实习。
标签: java string declaration string-concatenation