先看例子:
package com.amos;
/**
* @ClassName: EqualTest
* @Description:Java中的equal和==的比較
* @author: amosli
*/
public class EqualTest {
public static void main(String[] args) {
int a = 1;
float b = 1.0f;
System.out.println(a == b);// true
String c = new String("hi_amos");
String d = new String("hi_amos");
System.out.println(c == d);// false
System.out.println(c.equals(d));// true
}
}
Java中判斷兩個(gè)變量是否相等主要有兩種判方式:一種是利用==運(yùn)算符,另一種是利用equals方法來判斷兩者是否相同.
1).當(dāng)使用==來判斷兩個(gè)變量是否相等時(shí),如果兩個(gè)變量是基本類型變量,且都是數(shù)值類型,不要求數(shù)據(jù)類型嚴(yán)格相同,只要兩個(gè)變量的值相等,那么將返回true.
2).如果對于兩個(gè)引用類型變量,它們必須指向一個(gè)對象時(shí),==判斷才會返回true.==不可用于比較類型上沒有父子關(guān)系的兩個(gè)對象.
如上可以解釋同樣一new String時(shí),==判斷兩者是否相同返回的是false,而equals返回的是true.
equals方法針對的String類,查看其源碼,可以發(fā)現(xiàn)其實(shí)equals只能算是==的一種特例.如下面源碼所示:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
equals方法實(shí)際上一開始就調(diào)用了==判別式,然后再判斷其進(jìn)一步值是否正確