可能重复:
如何比较 Java 中的字符串?
我不明白为什么声明的变量不一样。
前代码:
String firstPart = "F";
String whole = "False";
String connected = firstPart + "alse";
System.out.println(connected == whole);
现在这会产生一个布尔值,我认为它会是“真的”,但事实并非如此,结果是错误的,我不明白为什么。
有人可以解释一下吗?
可能重复:
如何比较 Java 中的字符串?
我不明白为什么声明的变量不一样。
前代码:
String firstPart = "F";
String whole = "False";
String connected = firstPart + "alse";
System.out.println(connected == whole);
现在这会产生一个布尔值,我认为它会是“真的”,但事实并非如此,结果是错误的,我不明白为什么。
有人可以解释一下吗?
您正在比较参考,而不是值。
您需要使用equals:
connected.equals(whole);
这个
String connected = firstPart + "alse";
创建一个新 String对象,带有一个新的底层 char 数组和一个新的引用。
因此,当您比较参考文献(使用'=='')时,您将不会得到匹配。如果你比较实际的对象内容,equals()那么你会得到你想要的结果(因为String.equals()比较底层 char 数组的内容)
您应该使用比较字符串equals()。像这样:
System.out.println(connected.equals(whole));
Java 不是 JavaScript - 比较运算符不同:
在 java==中的意思是“这两个对象是同一个实例吗?”,对应于 JavaScript 的===操作符。
在 java.equals()中 for String 的意思是“字符是否相同”,对应于 JavaScript 的==操作符。
经验法则:==比较对象引用,而不是对象值。覆盖equals是定义对象之间相等性的标准方法(String包括在内,因为它是一个类,而不是原语)。
firstPart,whole并connected定义一个新的Stringeach,所以它们的引用是不同的,即使connected和whole匹配String池中的相同,因为==不会考虑值。
您应该使用 .equals() 方法来比较字符串...
本质上,只有 PDT 可以用 == 检查。这些是 byte、short、int、long、float、double、boolean、char,当然还有引用。由于您获得的两个引用是不同的对象,因此结果将是错误的。
对于任何 ADT(或对象),您必须使用 equals() 方法。所有 Java 对象都有它们,您也必须为自己的对象实现它。对于 String 对象,这已为您完成,并比较字符以测试相等性。
当您使用“==”来比较字符串时,这意味着您想要比较它们的参考值而不是它们的值,在这种情况下将返回 false。
您需要使用equals将根据字符串所持有的值比较字符串的方法。