Groovy中的 “==”、 is、equals 和 compareTo

Groovy
于泽  •  1528811449
Groovy中的 “==”、 is、equals 和 compareTo

Groovy中,如果实现了Comparable接口,则==会被映射到该类的compareTo()方法,否则映射到equals()方法。

如果比较两个对象的引用是否相等,使用is()方法

示例:

str1 = 'hello'
str2 = str1
str3 = new String("hello")
str4 = "Hello"

class A{
    boolean equals(other){
        println "equals called"
        false
    }
}

class B implements Comparable{
    boolean equals(other){
        println "equals called"
        false
    }
    int compareTo(other){
        println "compareTo called"
        0
    }
}

println "str1 == str2: ${str1 == str2}"
println "str1 == str3: ${str1 == str3}"
println "str1 == str4: ${str1 == str4}"

println "str1.is(str2): ${str1.is(str2)}"
println "str1.is(str3): ${str1.is(str3)}"
println "str1.is(str4): ${str1.is(str4)}"

new A() == new A()
new B() == new B()

运行结果:

str1 == str2: true
str1 == str3: true
str1 == str4: false
str1.is(str2): true
str1.is(str3): false
str1.is(str4): false
equals called
compareTo called