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==整)确实是真的。