13

可能重复:
如何比较 Java 中的字符串?

我不明白为什么声明的变量不一样。

前代码:

 String firstPart = "F";
 String whole = "False";
 String connected = firstPart + "alse";
 System.out.println(connected == whole);

现在这会产生一个布尔值,我认为它会是“真的”,但事实并非如此,结果是错误的,我不明白为什么。

有人可以解释一下吗?

4

8 回答 8

20

您正在比较参考,而不是值。

您需要使用equals

connected.equals(whole);
于 2013-01-15T13:38:14.413 回答
15

这个

String connected = firstPart + "alse";

创建一个 String对象,带有一个新的底层 char 数组和一个新的引用。

因此,当您比较参考文献(使用'=='')时,您将不会得到匹配。如果你比较实际的对象内容,equals()那么你会得到你想要的结果(因为String.equals()比较底层 char 数组的内容)

于 2013-01-15T13:39:47.640 回答
6

您应该使用比较字符串equals()。像这样:

System.out.println(connected.equals(whole));

于 2013-01-15T13:38:25.327 回答
1

Java 不是 JavaScript - 比较运算符不同:

在 java==中的意思是“这两个对象是同一个实例吗?”,对应于 JavaScript 的===操作符。

在 java.equals()中 for String 的意思是“字符是否相同”,对应于 JavaScript 的==操作符。

于 2013-01-15T13:42:34.087 回答
1

经验法则:==比较对象引用,而不是对象值。覆盖equals是定义对象之间相等性的标准方法(String包括在内,因为它是一个类,而不是原语)。

firstPart,wholeconnected定义一个新的Stringeach,所以它们的引用是不同的,即使connectedwhole匹配String池中的相同,因为==不会考虑值。

于 2013-01-15T13:43:42.643 回答
1

您应该使用 .equals() 方法来比较字符串...

于 2013-01-15T13:42:00.060 回答
1

本质上,只有 PDT 可以用 == 检查。这些是 byte、short、int、long、float、double、boolean、char,当然还有引用。由于您获得的两个引用是不同的对象,因此结果将是错误的。

对于任何 ADT(或对象),您必须使用 equals() 方法。所有 Java 对象都有它们,您也必须为自己的对象实现它。对于 String 对象,这已为您完成,并比较字符以测试相等性。

于 2013-01-15T13:42:00.180 回答
1

当您使用“==”来比较字符串时,这意味着您想要比较它们的参考值而不是它们的值,在这种情况下将返回 false。

您需要使用equals将根据字符串所持有的值比较字符串的方法。

于 2013-01-15T13:41:35.503 回答