关于java:为什么“F”+“alse”不是==“False”?

Why is “F” + “alse” not == “False”?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I compare strings in Java?

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

Ex代码:

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

现在这产生了一个布尔值,我认为它是"真的",但事实并非如此,它是假的,我不明白为什么。

有人能解释一下吗?


您正在比较引用,而不是值。

您需要使用equals

1
connected.equals(whole);

这个

1
String connected = firstPart +"alse";

使用新的基础char数组和新的引用创建新的String对象。

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


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

埃多克斯1〔2〕


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

firstPartwholeconnected分别定义了一个新的String,因此它们的引用是不同的,即使connectedwhole与池中相同的String匹配,因为==不会考虑值。


Java不是JavaScript——比较运算符是不同的:

在Java EDCOX1中,7个意思是"这两个对象是同一个实例吗?"对应于javascript的===操作符。

在Java EDCOX1中,对于字符串来说,9表示"字符是相同的",这对应于JavaScript的EDCOX1×7×操作符。


基本上,只有pdt可以用==进行检查。它们是byte、short、int、long、float、double、boolean、char,当然还有references。因为您得到的两个引用是不同的对象,所以结果将是错误的。

对于任何ADT(或对象),都必须使用equals()方法。所有Java对象都有它们,并且您也必须为自己的对象实现它。对于字符串对象,已经为您完成了这项工作,并将字符与测试相等性进行比较。


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


当您使用"=="比较字符串时,这意味着您要比较它们的引用值,但不比较它们的值,在这种情况下,这些值将返回false。

您需要使用equals方法,该方法将根据字符串所包含的值比较字符串。