Kotlin/Java hashCode与equals/==号(1)

Kotlin/Java hashCode与equals/==号(1)

Kotlin/Java的hashCode()方法默认返回对象在内存中地址的整数值。

Kotlin 复制代码
fun main(args: Array<String>) {
    val u1 = User("zhang", 1)
    val u2 = User("phil", 2)
    println("$u1 ${u1.hashCode()}")
    println("$u2 ${u2.hashCode()}")
}

class User {
    private var name: String? = null
    private var id: Int? = 0

    constructor(name: String, id: Int) {
        this.name = name
        this.id = id
    }
}

User@1ddc4ec2 500977346

User@133314b 20132171

@后面的16进制值即对象在内存中的地址,16进制转为10进制后即是hashCode():

1ddc4ec2转为十进制即是500977346

133314b转为十进制即是20132171

当在Kotlin/Java代码中用 == 比较两个对象是否相等(在kotlin中,如果使用equals()比较两个对象是否相等,ide会建议把equals换用 ==),比较的是对象在内存中的地址,如果两个对象的内存地址相同,那么Kotlin/Java就返回true,否则false。Java的Object中。默认的equals()实现:

java 复制代码
public boolean equals(Object obj) {
    return (this == obj);
}

Kotlin/Java比较两个对象是否相同的equals方法(相当于==),是根据两个对象的内存地址,如果默认不重写hashCode()实现,即可以简单理解为比较hashCode()的值是否相等,因为hashCode()值即为内存地址值。

以上说的是Kotlin/Java默认不重写hashCode与equals()方法时候的情景。如果定义的Kotlin/Java对象没有重写hashCode和equals,那么Kotlin/Java就调用根(super)的Obejct的hashCode()和equals()方法。

如果开发者重写了hashCode(),那么Object默认的toString()是把hashCode值转为十六进制,

Kotlin/Java默认的toString():

java 复制代码
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

是类名加上把hashCode()转为十六进制。

相关推荐
VX_bysjlw98533 分钟前
基于微信小程序的宠物用品商城系统-后端74346-计算机毕设原创(免费领源码+带部署教程)
java·redis·微信小程序·eclipse·mybatis·idea·微信开发者工具
JAVA面经实录9171 小时前
图解23种设计模式完整知识体系(Java后端面试完整版)
java·架构
会飞的大鱼人1 小时前
一文搞懂 Java HashSet:把它想成游乐园里只允许一次入场的盖章名单
java·开发语言·windows
AI_小站1 小时前
Loop Engineering又是啥?一文讲清企业Agent落地的四层工程进化论
java·人工智能·架构·prompt·大模型开发·智能体·大模型应用
jiay22 小时前
【.net10】顶级程序语句
java·开发语言
2601_953824612 小时前
【计算机毕业设计】基于Spring Boot的画师接稿平台设计与实现
java·spring boot·后端
Android-Flutter3 小时前
android fragment 使用
android·kotlin
小宋10213 小时前
不用学算法也能玩转 AI?普通 Java 程序员转 AI 应用开发路线
java·人工智能·重构
我是唐青枫3 小时前
Java Jetty 实战详解:从嵌入式 HTTP 服务到 Spring Boot 容器替换
java
带刺的坐椅3 小时前
当所有人都在用 TS/Python 写 Agent,我们为什么坚持 Java
java·ai·solon·codex·opencode·soloncode