有人可以向我解释为什么Python可以在下面的语句中显示以下语句,而Java却不能。我知道这与Java和equals()中的==有关,但我不太了解其中的区别。
Python代码
str1 = "Pro"
str2 = str1 + ""
if str1 == str2:
print("the strings are equal")```
Java代码
public class StringEq {
public static void main(String[] args) {
String str1 = "Pro";
String str2 = str1 + "";
if (str1 == str2) {
System.out.println("The strings are equal");
}
}
}
在python中,==
用于通过重写operator.eq(a, b)方法来比较对象的内容,str
类已覆盖了此对象,以便比较对象的内容
These are the so-called “rich comparison” methods. The correspondence
between operator symbols and method names is as follows: x<y calls
x.__lt__(y), x<=y calls x.__le__(y), x==y calls x.__eq__(y), x!=y calls
x.__ne__(y), x>y calls x.__gt__(y), and x>=y calls x.__ge__(y).
但是在java中,==
运算符用于比较对象here的引用
使用“ ==”运算符比较文本值是Java初学者最常见的错误之一。这是不正确的,因为“ ==”仅检查两个字符串的引用相等性,即它们是否引用相同的对象。
因此在Java中要比较对象的内容,您必须使用equals
类中重写的String
。
if (str1.equals(str2))
所以java ==
运算符等于python中的is
运算符,比较两个引用是否指向同一对象
Python的str
类为其__eq__
方法使用值相等。在Python中,类可以重写__eq__
来定义==
的行为。
与Java相比,==
始终执行引用相等。在Java中,==
仅在两个对象实际上是同一个对象时才返回true
。不论内容如何。 Java的==
与Python的is
运算符更具可比性。
如评论中所述,更好的比较是比较这些:
"a".equals("a") // Java
"a" == "a" # Python
Java的String
类的equals
执行值相等而不是引用相等。
它很好地解释了here:
这是该网站的报价:“我们可以使用==运算符进行参考比较(地址比较),并使用.equals()方法进行内容比较。简单来说,==检查两个对象是否指向相同的内存位置,而.equals()进行比较对象中的值。“