可能重复:
如何比较 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
定义一个新的String
each,所以它们的引用是不同的,即使connected
和whole
匹配String
池中的相同,因为==
不会考虑值。
您应该使用 .equals() 方法来比较字符串...
本质上,只有 PDT 可以用 == 检查。这些是 byte、short、int、long、float、double、boolean、char,当然还有引用。由于您获得的两个引用是不同的对象,因此结果将是错误的。
对于任何 ADT(或对象),您必须使用 equals() 方法。所有 Java 对象都有它们,您也必须为自己的对象实现它。对于 String 对象,这已为您完成,并比较字符以测试相等性。
当您使用“==”来比较字符串时,这意味着您想要比较它们的参考值而不是它们的值,在这种情况下将返回 false。
您需要使用equals
将根据字符串所持有的值比较字符串的方法。