如何编写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
相关产品推荐
相关产品推荐

