gpt4 book ai didi

groovy - equals() 和 == 在 Groovy 脚本中的含义相同吗?

转载 作者:行者123 更新时间:2023-12-02 08:17:53 25 4
gpt4 key购买 nike

代码:

    public class Equals {
public static void main(String[] args) {

String s1 = new String("java");
String s2 = new String("java");

if (s1 == s2) {
System.out.println("s1 == s2 is TRUE");
}
if (s1.equals(s2)) {
System.out.println("s1.equals(s2) is TRUE");
}
}
}

作为 Java 应用程序,输出为:

s1.equals(s2) is TRUE

这是正确的,因为 s1 和 s2 实际上指向不同的内存地址。但在 Groovy 脚本中(如 GroovyConsole),输出为:

s1 == s2 is TRUE
s1.equals(s2) is TRUE

有谁知道为什么吗?

最佳答案

有时 Groovy 中的 == 会调用 equals 方法,但情况并非总是如此。我将通过示例来说明:

class EqualsTest {
@Override
boolean equals(Object obj) {
true
}
}

assert new EqualsTest() == new EqualsTest()

该断言通过了,因此该理论似乎成立。但是在下面的示例中断言失败

class EqualsTest implements Comparable<EqualsTest> {
@Override
int compareTo(EqualsTest other) {
1
}
@Override
boolean equals(Object obj) {
true
}
}

assert new EqualsTest() == new EqualsTest() // FAILS!

Operator Overloading 中所述,如果类实现了 Comparable,则相等性测试基于 compareTo 的结果,否则基于 equals

a == b | a.equals(b) or a.compareTo(b) == 0
The == operator doesn't always exactly match the .equals() method. You can think of them as equivalent in most situations. In situations where two objects might be thought "equal" via normal Groovy "coercion" mechanisms, the == operator will report them as equal; the .equals() method will not do so if doing so would break the normal rules Java has around the equals method.

关于groovy - equals() 和 == 在 Groovy 脚本中的含义相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com