You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin与Java中Object equals对比:同内容对象为何结果不同?

为什么Kotlin和Java中User对象equals结果不同?

嘿,这个问题问得特别到位!刚好戳中了Kotlin和Java在类设计上的一个核心差异,我来给你掰扯清楚:

先看Java的情况

  • Java中所有类默认继承自Object类,而Object的equals方法默认逻辑是比较对象的内存引用地址——简单说就是判断两个变量是不是指向堆里的同一个实例。
  • 你用new User("Alex",1)创建了两个完全独立的对象,它们在内存里是两个不同的地址,所以equals自然返回false,这是Java的默认行为。

再看Kotlin的情况

你看到的true结果,大概率是因为你的Kotlin User类是用data class定义的(比如data class User(val name: String, val age: Int)):

  • Kotlin为data class提供了自动生成代码的特性,其中就包括基于类中所有属性的equals和hashCode方法。
  • 这个自动生成的equals会逐个比较两个对象的每个属性值:只要name和age都分别相等,不管是不是同一个对象实例,都会返回true。

额外验证小技巧

  • 如果把Kotlin的User改成普通类(去掉data关键字),再运行你的代码,结果会和Java一样变成false——因为此时Kotlin的equals默认也是引用比较。
  • 反过来,要是在Java的User类里手动重写equals方法,让它比较name和age的取值,那你的Java代码也会输出true。

内容的提问来源于stack exchange,提问作者ir2pid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:23:51