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