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
    }
}
相关推荐
AI量化投资实验室2 分钟前
年化422%,回撤7%,夏普比5.4| Deap因子挖掘新增qlib因子库,附python代码
开发语言·python
Dontla20 分钟前
Next.js项目演示(从零创建Next.js项目)Next.js入门实战
开发语言·javascript·ecmascript
eqwaak020 分钟前
科技信息差(9.29)
开发语言·科技·学习·算法
guigu201237 分钟前
C++ 面向对象进阶:继承深化与多态详解
开发语言·c++
小葡萄20251 小时前
JAVA中的抽象类和抽象方法
java·开发语言
Jeremy_Lee1231 小时前
MySQL 数据导出及备份方法
android
weixin_307779131 小时前
MATLAB用到的符号计算数学引擎
开发语言·算法·matlab
sali-tec1 小时前
C# 基于halcon的视觉工作流-章40-OCR训练识别
开发语言·图像处理·算法·计算机视觉·c#·ocr
恒云客1 小时前
Rust开发环境配置
开发语言·后端·rust
ggaofeng1 小时前
用 Python 实现一个简化但可运行的 单点登录(SSO)系统
开发语言·python