有人能向我解释为什么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");
}
}
}
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((的计算结果是对象中值的比较。">