ddf*_*fal 4 java string equals operator-keyword
public class Demo {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
System.out.println("s1 == s2 " + (s1 == s2));
String s5 = "Hel" + "lo";
String s6 = "He" + "llo";
System.out.println("s5 == s6 " + (s5 == s6));
String s7 = "He";
String s8 = "Hello";
s7 = s7.concat("llo");
System.out.println("s7 == s8 " + (s7 == s8));
String s10 = "He";
s10 = s10 + "llo";
System.out.println("s1 == s10 "+(s1 == s10));
}
}
Run Code Online (Sandbox Code Playgroud)
在前面的代码中,s7 == s8和s1 == s10给出false.有人可以解释一下,在s7 = s7.concat("llo")中实际发生了什么; 并且s10 = s10 +"llo"; 我理解==运算符检查引用和equal()检查对象的内容.但我需要知道为什么s7和s10参考变量位模式与s8和s1不同.如果这些事情与编译时生成的字符串和运行时生成的字符串有关,那么我如何识别它是编译时还是运行时字符串?
iss*_*eng 11
之所以发生这种情况,是因为Java在编译器中进行了优化.当它看到你将文字字符串分配"Hello"
给s1时,它对s2使用相同的"Hello",因为所有Java String操作都是非破坏性的(例如它们返回克隆而不是修改原始字符串),因此这是一个安全的要做的事.
同样的问题也发生在"Hel" + "lo"
VS "He" + "llo"
; 它足够聪明地弄清楚它们是同一个东西.
其他的很复杂,无法对它们进行优化,因此您最终会得到单独的对象.
归档时间: |
|
查看次数: |
381 次 |
最近记录: |