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)
为什么str3而str4不是指同一个对象?
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 次 |
| 最近记录: |