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

如何编写equals(==)函数实现Character类实例相等判断

实现方法

直接在现有Character类里重载==运算符即可,核心逻辑如下:

  • 首先校验待比较的对象是不是Character类型,不是的话直接返回false,避免跨类型比较报错
  • 类型校验通过后,同时对比两个实例的name和life属性,两个值都完全相等时返回true,否则返回false

补全后的完整类代码:

class Character {
  
    construct new(name,life){
        _name = name
        _life = life
    }
    
    name  { _name }
    life  { _life }

    // 相等判断逻辑
    ==(other) {
        if (!(other is Character)) return false
        return _name == other.name && _life == other.life
    }

    // 如果需要把Character实例放到Map、Set这类哈希结构里使用,必须同步重写hashCode,保证相等实例哈希值一致
    hashCode {
        return _name.hashCode ^ _life.hashCode
    }
}

简单测试效果:

var a = Character.new("Archer", 90)
var b = Character.new("Archer", 90)
var c = Character.new("Archer", 80)
var d = Character.new("Warrior", 90)

System.print(a == b) // 输出true
System.print(a == c) // 输出false,生命值属性不一致
System.print(a == d) // 输出false,名称属性不一致
System.print(a == 123) // 输出false,类型不匹配

提示:如果不重写hashCode方法,两个属性完全相等的实例在哈希容器中会被判定为不同元素,导致去重、键查找逻辑出错,没有这类使用场景可以忽略该方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:33:19