Java中equals方法和==的区别

本文详细解释了Java中equals方法与==操作符的区别。通过示例对比了不同情况下的行为,包括Object默认实现、String类重写及常量池的影响。

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

一般而言,equals是比较对象的内容,而==比较的是对象实例在内存中的地址,为什么说是一般而言,因为对于Object类中的equals方法,其作用和==相同,比较的都是对象在内存中的地址。下面看一些代码来说明。

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

以上是JDK中Object类的equals方法源码,直接将obj参数和本身实例做==比较,可以看出在Object中equals方法的作用和==是相同的。

class Test
{
    private int a=0, b=0;
    public Test(int a,int b) {
        // TODO Auto-generated constructor stub
        this.a=a;
        this.b=b;
    }
}
public class Main {

    public static void main(String[] args) {
        Test t1=new Test(1, 2);
        Test t2=new Test(1, 2);
        System.out.println("equals result is:"+t1.equals(t2));
        System.out.println("== result is:"+(t1==t2));
    }
}

以上代码定义了一个类Test,其equals方法直接继承自Object类。在main方法中定义了两个变量t1和t2,虽然其内容相同,但是比价的结果均为false,其运行结果如下:
这里写图片描述

public class Main {

    public static void main(String[] args) {
        String s1=new String("123");
        String s2=new String("123");
        System.out.println("== result is:"+(s1==s2));
        System.out.println("equals result is:"+s1.equals(s2));
    }
}

以上代码是String字符串的比较,String类重写了Object类的equals方法,equals方法比价的是字符串的内容,其运行结果如下:
这里写图片描述

public class Main {

    public static void main(String[] args) {
        String s1="123";
        String s2="123";
        System.out.println("== result is:"+(s1==s2));
        System.out.println("equals result is:"+s1.equals(s2));
    }
}

如以上代码所示,如String直接赋值而不是通过new来创建,那么s1和s2指向相同的实例,其运行结果均为true,实验结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值