【发布时间】:2016-09-28 05:02:40
【问题描述】:
我有以下数据类
data class PuzzleBoard(val board: IntArray) {
val dimension by lazy { Math.sqrt(board.size.toDouble()).toInt() }
}
我读到 Kotlin 中的数据类可以免费获得 equals()/hashcode() 方法。
我实例化了两个对象。
val board1 = PuzzleBoard(intArrayOf(1,2,3,4,5,6,7,8,0))
val board2 = PuzzleBoard(intArrayOf(1,2,3,4,5,6,7,8,0))
但是,以下语句仍然返回 false。
board1 == board2
board1.equals(board2)
【问题讨论】:
-
评论永远不会太晚,因为数据类 equals 合同是在主构造函数中传递的参数的基础上生成的。例如,
board1 = PuzzleBoard("Board", 20)和board2 = PuzzleBoard("Board", 20)将返回true为board1 == board2。在您的情况下,将根据数组内存地址生成相等的合同,这就是您得到错误的原因。
标签: arrays equals kotlin data-class