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 选项自动为您生成 equals
和 hashcode
.
如果两个对象是 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 选项自动为您生成 equals
和 hashcode
.