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
    }
}
相关推荐
wjs20243 小时前
状态模式(State Pattern)
开发语言
我命由我123453 小时前
Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)
java·开发语言·jvm·windows·java-ee·kotlin·list
liulilittle3 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
zepcjsj08014 小时前
简单实现支付密码的页面及输入效果
android
励志要当大牛的小白菜4 小时前
ART配对软件使用
开发语言·c++·qt·算法
小阳睡不醒5 小时前
小白成长之路-部署Zabbix7(二)
android·运维
mmoyula6 小时前
【RK3568 PWM 子系统(SG90)驱动开发详解】
android·linux·驱动开发
爱装代码的小瓶子6 小时前
数据结构之队列(C语言)
c语言·开发语言·数据结构
Maybe_ch8 小时前
.NET-键控服务依赖注入
开发语言·c#·.net
超浪的晨8 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发