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
    }
}
相关推荐
小羊没烦恼!20 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
千里马学框架20 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台20 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone21 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
伞伞悦读21 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
致远ccc21 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁1 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
孙启超1 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust