有人能解释一下为什么Python能够打印下面的语句,而Java没有,我知道它与==有关,但我并不真正理解两者之间的区别。
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");
}
}
}发布于 2019-10-24 23:04:38
在python ==中,通过重写(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初学者最常见的错误之一。这是不正确的,因为“==”只检查两个字符串的引用相等,这意味着它们是否引用同一个对象。
因此,在java中,要比较对象的内容,必须使用equals,它在String类中被重写。
if (str1.equals(str2))所以java ==操作符等于python中的is操作符,它比较了两个引用是否指向同一个对象。
发布于 2019-10-24 23:08:14
Python的str类对其__eq__方法使用值相等。在Python中,类可以覆盖__eq__来定义==的行为方式。
对比一下==总是引用相等的Java。在Java中,只有当两个对象实际上是同一个对象时,==才会返回true;而不管它们的内容如何。Java的==更类似于Python的is操作符。
如评论中所指出的,更好的比较办法是比较以下几点:
"a".equals("a") // Java
"a" == "a" # PythonJava的String类有它的equals做值相等,而不是引用相等。
发布于 2019-10-24 23:05:41
它很好地解释了这里
这里引用了该站点的一句话:“我们可以使用==操作符进行引用比较(地址比较)和.equals()方法进行内容比较。简单地说,==检查两个对象是否指向相同的内存位置,而.equals()则评估对象中值的比较。”
https://stackoverflow.com/questions/58550199
复制相似问题