【发布时间】:2011-04-17 11:59:42
【问题描述】:
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 不同。如果这些东西与编译时生成的字符串和运行时生成的字符串有关,那么我如何识别它是编译时字符串还是运行时字符串?
【问题讨论】:
-
“引用变量位模式”到底是什么意思?
-
另一个关于字符串问题的“==”。似乎经常有人问到这个问题的变体。难道不应该有一个标准答案,并且所有后续出现的都作为重复项关闭吗?
-
@cameron 我从某本书中了解到,如果引用变量 c 引用对象 X017432 并且引用变量 d 也引用对象 X017432,那么 c 和 d 中的位是相同的。所以我需要知道为什么 s7 和 s10 引用不等于 s8 和 s10 已经引用了字符串池中的“Hello”。
标签: java string operator-keyword equals