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