0%

==与equals方法

1. ==

  1. 对于基础数据类型,如int,float,double类型的值,==比较的是值是否相等。
  2. 对于引用数据类型,如自定义类实例,String类实例,其比较的是对象实例的地址。

2. equals方法

2.1 Object类的equals方法

Object类中的equals方法用于检测一个对象是否等于另一个对象,默认情况下其比较的是两个对象的哈希值,也就是判断两个对象是否具有相同的引用(地址)。

2.2 Objects类的equals方法

  1. static boolean equals(Object a, Object b)

    如果a和b都为空,返回真;如果只有其中之一为空,则返回假;否则返回a.equals(b); 避免了使用a.equals(b)且a为空时产生的空指针异常。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package equalstest;

import java.util.Objects;

public class Client {

public static void main(String[] args) {
String a = new String("abc");
String b = new String("abc");
System.out.println(Objects.equals(a, b)); //true
a = null;
System.out.println(Objects.equals(a, b)); //false
b = null;
System.out.println(Objects.equals(a, b)); //true
}

}
  1. static boolean deepEquals(Object a, Object b)

    如果对象a和b不是数组的话,则会比较两个对象的地址,否则会比较两个数组对应角标的元素的值(底层使用的Arrays.deepEquals0(Object a, Object b))。比较自定义对象数组时需覆盖equlas方法,否则比较的还是地址。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static void equalsTest() {
int[] numArr1 = {45,45,656,78,998,12,30,45};
int[] numArr2 = {45,45,656,78,998,12,30,45};
System.out.println(Objects.deepEquals(numArr1, numArr2)); //true

String s1 = new String("a");
String s2 = new String("b");
String[] sArr = {s1, s2};
String c1 = new String("a");
String c2 = new String("b");
String[] cArr = {c1, c2};
System.out.println(Objects.deepEquals(sArr, cArr)); //true

}
------ 本文结束------