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

Java中如何在类方法内访问调用该方法的对象(如c1.equals(c2)中的c1)

Combination类的equals与toString方法修正及问题解答

核心知识点

在类的实例方法中,调用方法的当前对象(比如c1.equals(c2)里的c1)可以直接访问自身成员变量,或用this关键字明确指代。例如直接写code等价于this.code,都指向当前对象的code数组。

修正后的完整代码

public class Combination {
    private int[] code;

    // 构造器:先初始化数组再赋值,避免空指针异常
    public Combination(int first, int second, int third) {
        code = new int[3];
        code[0] = first;
        code[1] = second;
        code[2] = third;
    }

    // 重写equals方法,符合Java规范
    @Override
    public boolean equals(Object obj) {
        // 判断是否为同一个对象
        if (this == obj) {
            return true;
        }
        // 处理null和类型不匹配的情况
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        // 类型转换后比较数组内容
        Combination other = (Combination) obj;
        return code[0] == other.code[0] &&
               code[1] == other.code[1] &&
               code[2] == other.code[2];
    }

    // 重写toString方法
    @Override
    public String toString() {
        return code[0] + ":" + code[1] + ":" + code[2];
    }
}

关键错误修复说明

  1. 构造器空指针问题
    原代码未初始化code数组,直接给code[0]赋值会触发NullPointerException,必须先执行code = new int[3];创建数组实例。

  2. equals方法的正确实现

    • 参数类型需为Object:原方法参数是Combination,属于重载而非重写Object类的equals,不符合Java规范,需改为Object obj并添加@Override注解。
    • 当前对象访问:this指代调用方法的对象(如c1.equals(c2)中的c1),this == obj可快速判断是否为同一对象。
    • 数组内容比较:数组是引用类型,==比较内存地址,需逐个对比元素内容(若数组长度不固定,可使用Arrays.equals(code, other.code)简化)。
  3. toString方法的递归问题
    原代码错误递归调用toString()会导致栈溢出,直接访问当前对象的code数组元素拼接字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:18:14