Java 中的 ==, equals 的区别

本文详细解释了Java中==操作符与equals方法的区别。==用于比较基本数据类型的值及引用类型变量的内存地址;equals默认比较引用是否相同,但如String类会重写equals以比较内容是否一致。

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

概念:

    == : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系

    equals : Object的实例方法,比较两个对象的content是否相同

关系操作符==

    基本数据类型变量

    对于基本数据类型变量,变量直接存储的是“值”,使用关系操作符来进行比较时,比较的就是“值”本身

    引用类型变量

    在Java中,引用类型的变量存储的并不是“值”本身,而是与其指向的对象在内存中的地址(关于对象引用的内容,不了解请查看这篇博客:https://blog.youkuaiyun.com/lxl121181/article/details/80483657

所以关系操作符判断的是左右两边操作数的内存地址是否相同,若返回true,则该操作符作用的一定是同一个对象

equals方法

    Java语言里的euqals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是euqal的

    所以我们不能单纯的说euqals到底比较的是什么。你想知道一个类的equals方法是什么意思就要去看定义


    Object类中equals方法实现如下:

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

很显然,在Object类中,equals方法时用来比较两个对象的引用是否相等,即是否指向同一个对象

而String类则覆写了这个方法

public boolean equals(Object anObject) {   
    if (this == anObject) {     // 1.先判断引用是否相同(是否为同一对象),
        return true;
    }
    if (anObject instanceof String) {   //2. 再判断类型是否一致,
        // 3.最后判断内容是否一致.
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
}

Java语言规范要求euqals方法具有下面的特性:

  • 对称性: 对于任何引用x和y,当且仅当x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true” ;

  • 自反性: 对于任何非空引用x,x.equals(x)应该返回“true” ;

  • 传递性对于任何引用x和y,如果x.equals(y)返回是“true”,y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true” ;

  • 一致性: 如果x和y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果

  • 对于任意非空引用x,x.equals(null)应该返回false。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值