Java:比較運算子compareTo()、equals()、==之間的區別與應用總結

DM--Tutor發表於2012-10-21

1、== 和 equals的區別:

 ==主要是兩個變數值的比較,返回值為true 或者是false。對於普通變數,如:int a=10; int  b= 10; a==b,返回為 true。

而對於下面情況:

String  a=new String("abc");

String  b=new String("abc");

a==b; 返回的則是一個false。這是因為,對於物件的比較是對物件引用的比較,對於a和b ,他們在記憶體中對應的地址是不一樣的,所以 a==b 返回的值是一個false.

==操作符並不涉及物件內容的比較。若要對物件內容進行比較,則用equals. 如果 在本例中,a.equals(b)則返回是一個true值。

總而言之,==是對物件地址的比較,而equals是對物件內容的比較。對於基本資料型別,一般用==,而對於字串的比較,一般用equals

2、對於compareTo(), 在API中,java.lang包下面的基本資料型別的封裝類都提供了該方法,如 Integer,Float,Byte,Short,Character 等

在基本資料中,compareTo()是比較兩個Character 物件;

在 Boolean中,是用boolean的例項於其它例項進行比較;

在String 中,則是按照字典順序進行比較,返回的值是一個int 型。

貼一段程式碼

public class Test{
   public static void main(String args[]){

    String s1=new String("abc");

    String s2=new String("abc");

    System.out.println((s1==s2)? "true":"false");

    System.out.println((s1.equals(s2))? "true":"false");

    if(s1.compareTo(s2)==0){

    System.out.println("s1 is equal s2");}

    s1=s2;

    System.out.println((s1==s2)? "true":"false");

       }
     }

程式的執行結果為:

false

true

s1 is equals s2

true

這裡需要說明的一點,s2物件賦值給s1之後,s2和s1的引用其實是指向了記憶體中的同一個位置。所以,再進行比較時,就是true.

相關文章