Java中equals和==的区别

本文深入解析了Java中==与equals方法的区别。==用于比较两个变量指向的对象地址,适用于引用类型时判断是否指向同一对象;对基本数据类型则比较其值。equals方法则用于比较两个对象的内容是否相等,其默认行为依赖于Object类中的实现,通常被子类重写以提供更具体的比较逻辑。

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

==比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。需要注意的是,如果比较的是基本数据类型,例如byte,short,char,int,long,float,double,boolean
此时比较的是值是否相等
如以下代码:

		int a = 1;
        int v = 1;
        System.out.println(a==v);//true 此时比较的是值
        String str1 = new String("Jim");
        String str2 = new String("Jim");
        System.out.println(str1 == str2);//false 此时比较的是地址值

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
equals源代码如下:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, 	aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

此时如果我们再次比较str1和str2,利用equals方法,我们可以发现,返回值为true,此时比较的是对象的内容,而不是地址值

 System.out.println(str1.equals(str2));//true 此时比较的是对象的内容

如果此时我们获取它们的地址值,我们会发现,两者的地址值并不相等

        System.out.println(System.identityHashCode(str1));//509886383
        System.out.println(System.identityHashCode(str2));//1854778591

故,equals方法比较的是对象的内容而不是地址值,==比较的是地址值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值