Java中equals方法重写的基本步骤

Java中equals方法的重写

Object类中的equals方法:

 public boolean equals(Object obj) {
        return (this == obj);//比较地址值
    }

Rewrite类中重写的Object类中的equals方法:

package test2;

public class Rewrite {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {
        /*return super.equals(obj);不能直接这样写的原因,不管返回的值是true还是false,都会直接跳出方法,后面的代码不在执行**/
        if (this == obj) {//Object类中的equals方法
            return true;
        }
        //重写的equals,扩展
        if (obj == null) {
            return false;
        }
        //进行类型判断
        if (obj instanceof Rewrite) {
            Rewrite rewrite = (Rewrite) obj;
            System.out.println(toString());//输出rewrite对象
            System.out.println(rewrite.toString());//输出rewrite1对象
			//判断name是否相同,根据需求扩展
            if (name != null) {
                if (rewrite.name != null) {

                    if (name.equals(rewrite.name)) {
                        return true;
                    }
                }

            }
        }
        return false;
    }
    @Override
    public String toString() {
        return "Rewrite{" +
                "name='" + name + '\'' +
                '}';
    }
}

测试类:

package test2;

public class Test {



    public static void main(String[] args) {
        Rewrite rewrite=new Rewrite();
        rewrite.setName("wang");
        Rewrite rewrite1=new Rewrite();
        rewrite1.setName("qio");



        if ( rewrite.equals(rewrite1)==true){

            System.out.println("是同一个");


        }else {
            System.out.println("不是同一个");
        }







    }


}

运行结果:

Rewrite{name='wang'}
Rewrite{name='qio'}
不是同一个

分享结束

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Javaequals方法用于比较两个对象是否相等。默认情况下,equals方法比较的是对象的引用是否相等,即比较两个对象是否指向同一个内存地址。但在实际开发,我们经常需要自定义equals方法来比较对象的内容是否相等。 重写equals方法的步骤如下: 1. 在类创建一个与equals方法签名相同的方法,即具有相同的名称、参数和返回类型。 2. 在重写equals方法,首先判断传入的对象是否为null,如果是则返回false。 3. 然后判断传入的对象是否与当前对象指向同一个内存地址,如果是则返回true,表示对象自己与自己相等。 4. 接着判断传入的对象是否属于当前类的实例,如果不是则返回false。 5. 将传入的对象强制转换为当前类的类型,然后比较对象的各个属性是否相等,如果有任何一个属性不相等,则返回false,表示两个对象不相等。 6. 如果以上条件都不满足,则认为两个对象相等,返回true。 以下是一个示例: ```java public class Person { private String name; private int age; // 构造方法、getter和setter省略 @Override public boolean equals(Object obj) { if (this == obj) { // 检查是否引用同一对象 return true; } if (obj == null || getClass() != obj.getClass()) { // 检查是否为null或类型是否相同 return false; } Person person = (Person) obj; // 强制转换为当前类的类型 return age == person.age && Objects.equals(name, person.name); // 比较属性是否相等 } } ``` 在重写equals方法时,通常还需要重写hashCode方法,以保证对象在放入散列集合(如HashSet、HashMap)能正确地工作。两个相等的对象必须具有相同的hashCode值。 希望以上内容能够解答你的问题。如果有任何疑问,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值