python和java==操作符有什么区别



有人能向我解释为什么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的str类为其__eq__方法使用值相等。在Python中,类可以覆盖__eq__来定义==的行为。

与之相比,Java中==总是执行引用相等。在Java中,如果两个对象实际上是同一个对象,==只会返回true;而不管其内容如何。Java的==与Python的is运算符更具可比性。

正如评论中所指出的,更好的比较是比较以下内容:

"a".equals("a")  // Java
"a" == "a"  # Python

Java的String类使其equals执行值相等,而不是引用相等。

在python中,==用于通过重写运算符来比较对象的内容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中使用了==运算符来比较这里对象的引用

使用"=="运算符比较文本值是Java初学者最常见的错误之一。这是不正确的,因为"=="只检查两个String的引用相等性,即它们是否引用同一对象。

所以在java中,要比较对象的内容,必须使用equals,它在String类中被重写。

if (str1.equals(str2))

因此,java==运算符等于python中的is运算符,后者比较两个引用是否指向同一对象

它在这里很好地解释了这一点:

这里引用了该网站的一句话:"我们可以使用==运算符进行引用比较(地址比较(,使用.equals((方法进行内容比较。简单地说,==检查两个对象是否指向同一内存位置,而.equals((的计算结果是对象中值的比较。">

最新更新