-
Notifications
You must be signed in to change notification settings - Fork 1.3k
== 和 equals 区别是什么
cxuan edited this page Jun 15, 2020
·
1 revision
==
是 Java 中一种操作符,它有两种比较方式
- 对于
基本数据类型
来说, == 判断的是两边的值
是否相等
public class DoubleCompareAndEquals {
Person person1 = new Person(24,"boy");
Person person2 = new Person(24,"girl");
int c = 10;
private void doubleCompare(){
int a = 10;
int b = 10;
System.out.println(a == b);
System.out.println(a == c);
System.out.println(person1.getId() == person2.getId());
}
}
- 对于
引用类型
来说, == 判断的是两边的引用
是否相等,也就是判断两个对象是否指向了同一块内存区域。
private void equals(){
System.out.println(person1.getName().equals(person2.getName()));
}
equals
是 Java 中所有对象的父类,即 Object
类定义的一个方法。它只能比较对象,它表示的是引用双方的值是否相等。所以记住,并不是说 == 比较的就是引用是否相等,equals 比较的就是值,这需要区分来说的。
equals 用作对象之间的比较具有如下特性
-
自反性
:对于任何非空引用 x 来说,x.equals(x) 应该返回 true。 -
对称性
:对于任何非空引用 x 和 y 来说,若x.equals(y)为 true,则y.equals(x)也为 true。 -
传递性
:对于任何非空引用的值来说,有三个值,x、y 和 z,如果x.equals(y) 返回true,y.equals(z) 返回true,那么x.equals(z) 也应该返回true。 -
一致性
:对于任何非空引用 x 和 y 来说,如果 x.equals(y) 相等的话,那么它们必须始终相等。 -
非空性
:对于任何非空引用的值 x 来说,x.equals(null) 必须返回 false。