你不知道的Java学习笔记11--“equals()”与“==”的区别

本文详细阐述了Java中equals方法与==运算符的区别。equals方法通常用于比较对象的内容是否相等,而==则用来比较对象的引用是否相同。文章通过代码示例展示了两者在不同场景下的使用,并介绍了equals方法的默认行为及如何实现自定义的equals方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

equals()与==的区别

1、equals( )用于比较两个对象的内容是否相等。

对象1.equals(对象2) //对对象1与对象2的首地址进行比较,判断两个对象是否指向同一个地址,如果是指向同一个地址则返回true,反之则反。

package com;
public class EqualsTest {
    public static void main(String[] args) {
        //对象name1与name2都指向存放“张三”的内存首地址
        String name1="张三";
        String name2="张三";

        //对象name3指向存放“李四”的内存首地址
        String name3="李四";

        System.out.println(name1.equals(name2));
        System.out.println(name1.equals(name3));
    }
}

这里写图片描述

2、默认情况下(即没有被重写时)equals()只能比较引用类型,“==”既能比较引用类型又能比较基本类型。

package com;
public class EqualsTest {
    public static void main(String[] args) {
        int a=10;
        int b=10;
        int c=20;
        //对象name1与name2都指向存放“张三”的内存首地址
        String name1="张三";
        String name2="张三";

        //对象name3指向存放“李四”的内存首地址
        String name3="李四";
        //equals只能比较引用类型
        System.out.println(name1.equals(name2));
        System.out.println(name1.equals(name3));
        //System.out.println(a.equals(b));
        //System.out.println(a.equals(c));

        //“==”既能比较引用类型又能比较基本类型
        System.out.println(name1==name2);
        System.out.println(name1==name3);
        System.out.println(a==b);
        System.out.println(a==c);
    }
}

这里写图片描述

这里写图片描述

3、equals()方法从Object类继承,即比较对象引用的值(this和obj的首地址)

  public boolean equals(Object obj) {
        return (this == obj);
    }

4、一般都被子类方法覆盖,不再比较引用的值,而是执行子类方法体的代码。

     public boolean equals(Object obj)
     {
        return false; 
     }
/*
 * 利用equal()比较两个对象的内容是否相等
 */
package com;
/*
 * 定义Person类
 * 属性:姓名,年龄
 * 方法:比较两个对象的内容是否相等
 */
public class Person {
        String name;
        int age;
        //定义equals方法用于比较两个对象的内容是否相等
     public boolean equals(Object obj)
     {
        /* //this代表当前的Person类,即Person==obj
        if(this==obj)
        {
            return true;//Person==obj,直接返回,停止执行下面的语句
        }
        //判断obj是否是Person的实例
        if(obj instanceof Person)
        {
            //obj的原来类型是属于Object,而Person是Person类,是Object的子类。
            //所以必须把obj强制转换为Person类,使得obj与Person处于相同的类型才能进行比较。
            Person p =(Person)obj;
            //属性进行一一比较
            if(this.name.equals(p.name)&&this.age==p.age)
            {
                return true;
            }
        }*/
        return false; 
     }
}
class Test{
    public static void main(String[] args) {
        //创建P1,P2两个对象
        Person p1=new Person();
        Person p2=new Person();
        p1.name="Tom";
        p1.age=20;
        p2.name="Tom";
        p2.age=21;

        //打印P1,P2两个对象比较的结果
        System.out.println(p1.equals(p2));
    }
}

这里写图片描述

5、“==”运算符在比较基本数据类型时相当于算术等号;在比较引用数据类型时比较引用的值,不能被覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值