为什么是python和java ==运算符之间的区别

问题描述 投票:3回答:3

有人可以向我解释为什么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");
        }
     }
 }
java python string equals
3个回答
1
投票

在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运算符,比较两个引用是否指向同一对象


3
投票

Python的str类为其__eq__方法使用值相等。在Python中,类可以重写__eq__来定义==的行为。

与Java相比,==始终执行引用相等。在Java中,==仅在两个对象实际上是同一个对象时才返回true。不论内容如何。 Java的==与Python的is运算符更具可比性。

如评论中所述,更好的比较是比较这些:

"a".equals("a")  // Java

"a" == "a"  # Python

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


1
投票

它很好地解释了here

这是该网站的报价:“我们可以使用==运算符进行参考比较(地址比较),并使用.equals()方法进行内容比较。简单来说,==检查两个对象是否指向相同的内存位置,而.equals()进行比较对象中的值。“

© www.soinside.com 2019 - 2024. All rights reserved.