0
点赞
收藏
分享

微信扫一扫

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


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()能够比较内容

举报

相关推荐

0 条评论