【发布时间】:2012-12-29 14:58:49
【问题描述】:
我不明白为什么声明的变量不一样。
前代码:
String firstPart = "F";
String whole = "False";
String connected = firstPart + "alse";
System.out.println(connected == whole);
现在这会产生一个布尔值,我认为它会是“真”,但事实并非如此,结果是假的,我不明白为什么。
谁能解释一下?
【问题讨论】:
-
+1。如果您不了解
equals(),这是一个足够公平的问题,尽管使用“False”作为示例会混淆问题(人们可能会认为您想将字符串与布尔值进行比较) -
这是一个常见的错误。但是这个问题可能已经在 SO 上被问过数千次了。
-
感谢您抽出宝贵时间!非常感谢!
-
如果您将
firstPart设为final,它将是同一个对象,因此==将为真。否则只有 contents 是相同的,所以你必须使用equals -
Java 中的字符串是不可变的。所以字符串 a + 字符串 b 永远不会 == 字符串 c。很可能 (string a + string b) 将被分配到栈上,而 string c 将在字符串池中。