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));
}
}
在前面的代码中,s7 == s8和s1 == s10给出false。有人可以解释我,在这里实际发生了什么s7 = s7.concat(“llo”);和s10 = s10 +“llo”;我明白==运算符检查引用和equal()检查对象的内容。但我需要知道为什么s7和s10引用变量的位模式与s8和s1不同。如果这些东西与编译时生成的字符串和运行时生成的字符串有关,那么我怎样才能确定它是编译时还是运行时字符串?关于java中==运算符的问题
你是什么意思的“参考变量位模式”? – Cameron 2010-09-26 19:37:29
String问题上的另一个'=='。似乎在这个相同的问题上的变化被频繁地询问。难道不应该有标准答案,并且所有后续事件都会被重复关闭吗? – 2010-09-26 22:05:53
@cameron我从一些书中学到了如果一个引用变量c引用了对象X017432并且引用变量d也引用了对象X017432,那么c和d中的位就是相同的。所以我需要知道为什么s7和s10引用不等于已经引用字符串池中的“Hello”的s8和s10。 – ddfnfal 2010-09-27 06:46:52