Kotlin Data包含ByteArray类型

在 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
    }
}
相关推荐
2301_7951672010 小时前
Python 高手编程系列八:缓存
开发语言·python·缓存
8***293110 小时前
Go基础之环境搭建
开发语言·后端·golang
Yue丶越10 小时前
【C语言】自定义类型:联合体与枚举
c语言·开发语言
修炼者11 小时前
Android Studio的技巧
android·android studio
雨白11 小时前
ARouter 入门指南:从基本跳转到对象传递
android
csbysj202011 小时前
DOM 节点
开发语言
小尧嵌入式11 小时前
C++基础语法总结
开发语言·c++·stm32·单片机·嵌入式硬件·算法
@游子11 小时前
Python学习笔记-Day2
开发语言·python
qq_3363139311 小时前
java基础-集合进阶
java·开发语言·windows
222you11 小时前
MybatisPlus常用注解
java·开发语言·spring