Java 为什么是;F"+&引用;“阿尔斯”;不==";假;?
可能重复:Java 为什么是;F"+&引用;“阿尔斯”;不==";假;?,java,string-comparison,Java,String Comparison,可能重复: 我不明白为什么声明的变量不一样 ex代码: String firstPart = "F"; String whole = "False"; String connected = firstPart + "alse"; System.out.println(connected == whole); 现在,这产生了一个布尔值,我认为它是“真的”,但它不是,结果是假的,我不明白为什么 有人能解释一下吗?您是在比较引用,而不是值 您需要使用equals: connected.eq
我不明白为什么声明的变量不一样 ex代码:
String firstPart = "F";
String whole = "False";
String connected = firstPart + "alse";
System.out.println(connected == whole);
现在,这产生了一个布尔值,我认为它是“真的”,但它不是,结果是假的,我不明白为什么
有人能解释一下吗?您是在比较引用,而不是值 您需要使用
equals
:
connected.equals(whole);
您应该使用
equals()
比较字符串。像这样:
System.out.println(connected.equals(整体))代码>此
String connected = firstPart + "alse";
创建一个新的String
对象,其中包含一个新的底层字符数组和一个新引用
因此,当您比较引用(使用“==”)时,将不会得到匹配。如果使用equals()
比较实际对象内容,则会得到想要的结果(因为String.equals()
比较底层字符数组的内容)当使用“==”比较字符串时,意味着要比较它们的参考值,而不是它们的值,在这种情况下,将返回false
您需要使用equals
方法,该方法将根据字符串所包含的值对字符串进行比较。您应该使用.equals()方法来比较字符串…本质上,只有PDT可以通过==进行检查。它们是byte、short、int、long、float、double、boolean、char,当然还有引用。由于得到的两个引用是不同的对象,因此结果将为false
对于任何ADT(或对象),都必须使用equals()方法。所有Java对象都有它们,您也必须为自己的对象实现它们。对于字符串对象,这已为您完成,并将比较字符以测试相等性。Java不是JavaScript-比较运算符不同:
在java中,=
表示“这两个对象是同一个实例吗?”,对应于JavaScript的==
操作符
在java中,字符串的.equals()
表示“字符是否相同”,对应于JavaScript的=
运算符。经验法则:=
比较对象引用,而不是对象值。重写equals
是定义对象之间相等的标准方法(String
包括在内,因为它是一个类,而不是一个基元)
firstPart
、total
和connected
分别定义了一个新的字符串,因此即使connected
和total
匹配池中相同的字符串,它们的引用也是不同的,因为=
不会考虑值。+1。如果您不知道equals()
,那么这是一个相当公平的问题,尽管使用“False”作为示例会混淆问题(人们可能会认为您想要比较字符串和布尔值),但这是一个常见的错误。但是这个问题以前可能已经被问过几千次了。谢谢你抽出时间!非常感谢!如果将第一部分
设置为最终,则它将是相同的对象,因此=
将为真。否则,只有内容是相同的,因此您必须使用Java中的equals
字符串是不可变的。所以字符串a+b永远不会==字符串c。很可能(字符串a+字符串b)将被分配到堆栈上,而字符串c将被分配到字符串池中。正因为其他人会看到这一点,由于字符串的插入,如果您将字符串分配为最终分配,那么(connected==整)确实是真的。