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 ); |
现在这产生了一个布尔值,我认为它是"真的",但事实并非如此,它是假的,我不明白为什么。
有人能解释一下吗?
- + 1。如果你不了解equals(),这是一个很公平的问题,尽管用"假"作为例子会混淆这个问题(人们可能会认为你想把弦和布尔比较)。
- 这是一个常见的错误。但这个问题可能已经被问过几千次了。
- 谢谢你抽出时间来!非常感谢!
- 如果你让EDOCX1[1]成为最终结果,它将是同一个目标,所以EDOCX1[2]将是正确的。否则,只有内容相同,所以您必须使用equals
- Java中的字符串是不可变的。因此,字符串A+字符串B永远不会==字符串C。很可能(字符串A+字符串B)将在堆栈上分配,而字符串C将在字符串池中分配。
- 问题是-如果你在你的代码中写这种东西,别人怎么理解它?
- @Tejaswirana这是一个家庭作业问题,用来说明编译器是如何工作的,而不是指出语法中的许多其他错误;)因为我学到了很多,所以它本身并不是一个坏问题。
您正在比较引用,而不是值。
您需要使用equals:
1
| connected.equals(whole); |
这个
1
| String connected = firstPart +"alse"; |
号
使用新的基础char数组和新的引用创建新的String对象。
因此,当您比较引用(使用"==")时,您将得不到匹配。如果您使用equals()比较实际的对象内容,那么您将得到想要的结果(因为String.equals()比较底层char数组的内容)
- 正因为其他人会看到这一点,由于字符串内部的原因,如果您使字符串分配成为最终的,那么(connected==whole)确实是正确的。
应该使用equals()比较字符串。就像这样:
埃多克斯1〔2〕
经验法则:==比较对象引用,而不是对象值。重写equals是定义对象之间相等的标准方法(包括String,因为它是一个类,而不是一个原语)。
firstPart、whole和connected分别定义了一个新的String,因此它们的引用是不同的,即使connected和whole与池中相同的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方法,该方法将根据字符串所包含的值比较字符串。