程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> equals(Object) 與 == 的區別

equals(Object) 與 == 的區別

編輯:關於JAVA

在比較對象時候,常常用到"=="和"equals(Object)"。它們常常讓初學者感到疑惑。下面先看一個例子

public class Example1
{
public static void main(String[] args)
{
String s1=new String("abc");
String s2=new String("abc");
// s1=s2;
System.out.println("用 == 比較結果");
System.out.println(s1==s2); //false
}
}

既然兩個String對象內容同為"abc"為什麼先打出false呢。那是由於"=="比較的是兩個對象的引用(references),並不是他們的內容,怎麼才能比較內容是否相等呢?去掉s1=s2一句的注釋符結果就不同了,因為他們的引用相同了。

我們要使用equals(Object)方法,由於equals(Object)方法為Object類中定義的方法,所用按照默認方式定義過的類均是其子類。也就是說Object類為所有類的超類(superclass,也叫父類、基類等),在Object中的equals(Object)方法其標准形式為

public boolean equals(Object obj)

返回類型為boolean,即true/false與"=="返回類型一樣。Object類中定義的equals(Object)方法是直接使用"=="比較的兩個對象,所以在沒有覆蓋(override,或稱改寫、重寫)equals(Object)方法的情況下,equals(Object)與"=="一樣是比較的引用。如下例(結果在注釋中):

public class Example4
{
public static void main(String[] args)
{
Example4 e=new Example4();
Example4 e4=new Example4();
System.out.println("用 equals(Object) 比較結果");
System.out.println(e.equals(e4)); //結果為 false
System.out.println("用 == 比較結果");
System.out.println(e==e4); //結果為 false
}
}

equals(Object)方法與"=="相比的特殊之處就在於它可以覆蓋,所以我們可以通過覆蓋的辦法讓它不是比較引用而是比較數據內容。當然JDK中也有覆蓋過equals(Object)方法的類,如java.lang.String,它就覆蓋了從Object繼承來的的equals(Object)方法,用以比較字符串內容是否相同。看看下面這個例子:

public class Example1
{
public static void main(String[] args)
{
String s1=new String("abc");
String s2=new String("abc");
System.out.println("用 == 比較結果");
System.out.println(s1==s2);//false
System.out.println("用equals(Object) 比較結果");
System.out.println(s1.equals(s2));//true
}
}

例中用equals(Object)比較結果為true。用==比較結果為false。String.equals(Object)方法直接比較了兩個字符串的內容,如果相同則返回true,否則返回false。你可以嘗試把其中一個"abc"改成"abcde",看看結果有何變化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved