在 Kotlin 中,当数据类(data class
)包含 ByteArray
类型参数时,需特别注意 数组内容的比较 、自动生成方法的行为 以及 内存管理。以下是关键注意事项和解决方案:
- 核心问题:数据类自动生成的 equals() 和 hashCode() 方法会使用 ByteArray 的引用地址(而非内容)进行比较
- 手动重写数据类方法
需显式重写 equals()、hashCode() 和 toString(),确保基于 ByteArray 内容进行比较:
kotlin
data class ImageData(val data: ByteArray) {
// 重写 equals:比较 ByteArray 内容
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as ImageData
return data.contentEquals(other.data) // 使用 contentEquals 比较数组内容
}
// 重写 hashCode:基于数组内容生成
override fun hashCode(): Int {
return data.contentHashCode() // 使用 contentHashCode
}
// 重写 toString:输出可读内容
override fun toString(): String {
return "ImageData(data=${data.contentToString()})" // 使用 contentToString
}
}