Java equals()与==在不同情况下的不同解释

作者: adm 分类: java 发布时间: 2022-11-20

1.相对于八大基本类型:
== 比较的是具体内容,

例如 int a = 0; int b = 0; 那么 a == b

equals(), 八大类型无法使用该方法.

2.相对于八大基本类型包装类:
== 比较的是内存地址,

例如 Integer a = new Integer(0); Integer b = new Integer(0); 那么 a == b 返回false

Integer a = new Integer(0); Integer b = a; 那么 a == b 返回true

equals()则是比较内容.

例如 Integer a = new Integer(0); Integer b = new Integer(0); 那么 a.equals(b) 返回true

3.相对于String类 (关于==和equals()与八大基本类型相同)
== 比较的是内存地址,

equals()则是比较内容.

4.相对于常规普通类

例如 :

class A { 
    int x; 
} 
public class Test{ 
    public static void main(String[] args) { 
        A a1 = new A(); 
        A a2 = new A(); 
        a1.x = a2.x = 1; 
        System.out.println(v1.equals(v2));//false 
        System.out.println(v1 == v2);//true 
    } 
} 

因为==比较的是内存地址,所以这边没啥争议的.

为什么equals()方法明明是比较内容的,而这边却没有像八大基本类型的包装类哪样呢?

因为该普通类没有重写equals()方法,导致equals无法知道判断内容的依据是什么.故返回false

分别一句话总结:
== 在除了八大基本类型外的所有场景,均是比较内存地址.

equals() 比较的是重写Object的equals()时指定的依据 .

比如String类,八大基本类型包装类, 这些类因为重写了该方法,使得equals()能够比较内容

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!