1.==是一个操作符,用于比较两个引用的值是否相等。
2.equals()是Object中的一个方法,默认实现如下。可以看到,在Object中,equals()方法与==操作符的效果相同。
1 public boolean equals(Object obj) { 2 return (this == obj); 3 }
2.1 equals()的重写版本
由于Object是java所有类的父类,所以java类均可以根据需要重写equals()方法。
因此,需要特别注意的是:不同的对象或者类,其equals()方法的实现可能是不同的。
2.1.1 String类中equals()的重写版本
1 public boolean equals(Object anObject) { 2 if (this == anObject) {//如果两个引用相等,则直接返回true; 3 return true; 4 } 5 if (anObject instanceof String) {//如果传入的对象是String类型,则比较两个String的值。值相等,则返回true; 6 String anotherString = (String) anObject; 7 int n = value.length;//value是String类中的一个私有变量,是一个char数组,用于存储该String实例的字符。 8 if (n == anotherString.value.length) { 9 char v1[] = value; 10 char v2[] = anotherString.value; 11 int i = 0; 12 while (n-- != 0) { 13 if (v1[i] != v2[i]) 14 return false; 15 i++; 16 } 17 return true; 18 } 19 } 20 return false; 21 }
java类库中均对equals()方法进行重写,String类中的实现如上。可以看到,返回true的条件是:
(1)传入的对象引用与该String引用相等;
(2)传入的对象是String类的一个实例且值与String的值相等。