Python和Java的“==”运算符有什么区别?

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");
        }
     }
 }

.equals() 进行比较 - FailingCoder
这些运算符在两种语言中有不同的含义。在Java中,==等同于Python中的is,即比较两个字符串是否指向相同的内存位置。 - Selcuk
Python不等于Java,所以我不知道你期望什么。 - juanpa.arrivillaga
1
@juanpa.arrivillaga OP很可能知道Java != Python的事实。我认为OP想知道为什么在实现类似行为时存在语义差异,而使用相同语法更具逻辑上的一致性,解释Java!= Python的区别就像通过说“嗯,因为重力”来解释飞机坠毁 :) - code_dredd
3个回答

3
Python的“str”类在其“__eq__”方法中使用值相等。在Python中,类可以重写“__eq__”来定义“==”的行为。
与此形成对比的是Java,“==”总是进行引用相等性比较。在Java中,“==”只有在两个对象完全相同时才会返回true,不管它们的内容如何。Java的“==”更类似于Python的“is”运算符。
正如评论中所指出的那样,更好的比较应该是比较这些:
"a".equals("a")  // Java

"a" == "a"  # Python

Java的String类中的equals方法比较的是字符串值而不是引用。


2
是的,Java中的==更像Python中的is - juanpa.arrivillaga

1

这里有一个很好的解释点此

并且这里有一句引用来自那个网站: “我们可以使用 == 运算符进行引用比较(地址比较),使用 .equals() 方法进行内容比较。简单来说,== 检查两个对象是否指向相同的内存位置,而 .equals() 则对对象中的值进行比较。”


1
在Python中,==用于通过重写operator.eq(a, b)方法来比较对象的内容,str类已经重写了该方法以比较对象的内容。请注意保留HTML标签。
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中比较对象的内容,您必须使用被String类覆盖的equals方法。

if (str1.equals(str2))

因此,Java中的==运算符等同于Python中的is运算符,它比较两个引用是否指向同一个对象。


希望您了解Python,is==在Python中有什么区别? - Ryuzaki L
@Adamtoo 一个与你完全相同的克隆体在价值平等方面可以被认为与你相等,但在引用平等方面不会与你相等。你们可能在基因(即“内容”)方面相等,但你们并不是同一个人。 - Carcigenicate
Python中的类名为str - juanpa.arrivillaga
据我所理解,checks for identities(检查身份)使用的是“is”,而checks for equality(检查相等性)使用的是“==”。由于Java中的两个字符串与代码中显示的并不完全相同,因此输出为False,而在Python中则相反。 - user12245018
由于Java中的两个字符串并不完全相同,这是错误的。它们都是相同的,但并不指向同一个对象,因此输出为“False”@Adamtoo,而在Python中,“==”比较内容,其中两个对象具有相同的内容。 - Ryuzaki L
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接