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
    }
}
相关推荐
Aczone285 小时前
硬件(六)arm指令
开发语言·汇编·arm开发·嵌入式硬件·算法
YA3335 小时前
java设计模式二、工厂
java·开发语言·设计模式
逐雨~6 小时前
9.8C++作业
开发语言·c++
我爱挣钱我也要早睡!7 小时前
Java 复习笔记
java·开发语言·笔记
Yang-Never8 小时前
Kotlin协程 -> Job.join() 完整流程图与核心源码分析
android·开发语言·kotlin·android studio
XeonYu9 小时前
Kotlin 协程之 突破 Flow 限制:Channel 与 Flow 的结合之道
kotlin·coroutine·channelflow·callbackflow·receiveasflow·consumeasflow
TomCode先生10 小时前
c#动态树形表达式详解
开发语言·c#
高-老师10 小时前
基于R语言的物种气候生态位动态量化与分布特征模拟
开发语言·r语言·物种气候
大翻哥哥11 小时前
Python 2025:量化金融与智能交易的新纪元
开发语言·python·金融
weixin_4378309411 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr