Kotlin 中的 equal() 函数

equal() function in Kotlin

如果两个对象是 equal() 我需要 print("Equal") 如果对象不相等 -> “不相等”。我找不到这段代码的错误 This is my code in IntelliJ IDEA 作为旁注,当我们覆盖 equals() 时,建议也覆盖 hashCode() 方法。如果我们不这样做,相同的对象可能会得到不同的散列值;和基于散列的集合,包括 HashMap、HashSet 和 Hashtable 无法正常工作(有关更多详细信息,请参见此处)。我们将在单独的 post 中详细介绍 hashCode()。 参考文献:

internal class Complex(private val re: Double, private val im: Double) {
    // Overriding equals() to compare two Complex objects
    fun equals(o: Object): Boolean {

        // If the object is compared with itself then return true
        if (o === this) {
            return true
        }

        /* Check if o is an instance of Complex or not
          "null instanceof [type]" also returns false */if (o !is Complex) {
            return false
        }

        // typecast o to Complex so that we can compare data members
        val c = o as Complex

        // Compare the data members and return accordingly
        return (java.lang.Double.compare(re, c.re) == 0
                && java.lang.Double.compare(im, c.im) == 0)
    }
} // Driver class to test the Complex class

    fun main(args: Array<String>) {
        val c1 = Complex(12.0, 15.0)
        val c2 = Complex(10.0, 15.0)
        if (c1 == c2) {
            println("Equal ")
        } else {
            println("Not Equal ")
        }
    }

A data class 更有意义:

data class Complex(
  private val re: Double,
  private val im: Double
)

val c1 = Complex(12.0, 15.0)
val c2 = Complex(10.0, 15.0)

if (c1 == c2) {
  println("Equal")
} else {
  println("Not Equal")
}

输出:不相等

在 Kotlin 中,您使用 Any 而不是 Object。它不允许你测试你的 class 实例是否是一个对象,只有 Any.

此外,您未能覆盖 equals,因为您没有使用 override 关键字。参数必须是 Any?,而不是 Object.

改变

fun equals(o: Object): Boolean {

override fun equals(o: Any?): Boolean {

此外,在这种情况下,您应该使用数据 class,这样您就不必首先编写自己的 equals() 实现。

并且将来,当您不使用数据 class 时,您可以使用 IDE 选项自动为您生成 equalshashcode .