compareTo,equals和==

首先看下面一段代碼:

String s1 = new String("123");
String s2 = new String("123");
System.out.println(s1==s2);

輸出結果:false

==主要是兩個變量值的比較,返回值為true 或者是false。對于普通變量,如:int a=10; int b= 10; a==b,返回為 true。而對于上面的情況返回的則是一個false。這是因為,對于對象的比較是對對象引用的比較,對于s1和s2 ,他們在內存中對應的地址是不一樣的,所以 s1==s2 返回的值是一個false。

==操作符并不涉及對象內容的比較。若要對對象內容進行比較,則用equals。如下:

String s1 = new String("123");
String s2 = new String("123");
System.out.println(s1.equals(s2));

輸出結果:true

總而言之,==是對對象地址的比較,而equals是對對象內容的比較。對于基本數據類型,一般用==,而對于字符串的比較,一般用equals。

equals只返回 true or false。compareTo函數的作用就是對兩個字符串按字典排序的方式進行比較,返回兩個字符串中第一個不同的字符的ascII碼差值。

下面有程序代碼看看測試結果:

public class equals_compareTo {    
    public static void main(String[] args) {    
        String a = "abcd";    
        String b = "abcd";    
    
        String c = new String("abcd");    
        String d = new String("abcd");    
    
        String e = c;    
        String f = "absd";    
    
        System.out.println("a.equals(b): " + a.equals(b));//a和b在字面上的每個字母都是相同的,所以返回TRUE    
        System.out.println("b.equals(c): " + b.equals(c));//c和b在字面上的每個字母都是相同的,所以返回TRUE    
    
        System.out.println("a == b: " + (a == b));//此處為什么會返回TRUE呢,原因是我們先定義了a="abcd",當我們再次定義b="abcd"是,系統檢測到已經在內存中存在了相同的"abcd",所以b會直接引用已有的"abcd"    
    
        System.out.println("a == c: " + (a == c));//a和c不是引用的同一個對象,所以false    
        System.out.println("a == f: " + (c == d));//d和c不是引用的同一個對象,所以false    
    
        System.out.println("c == e: " + (c == e));//e引用c,所以比較會返回true    
    
        System.out.println("f.compareTo(c): " + f.compareTo(c));//比價結果是16,即第一個不同的字母s與c的ascII碼差值    
        System.out.println("a.compareTo(c): " + a.compareTo(c));//ac值相同,返回0    
    }    
}    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,739評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 含著淚,我一讀再讀,卻不得不承認,青春,是一本太過倉促的書。 我不得不承認,青春期,已經離我漸漸地遠去,只剩下青春...
    單芙曦陽閱讀 585評論 4 3
  • 歲月悄然流逝五千年,只余激揚世俗的文字,跌宕出歷史五千年的褶皺;文字不堪歲月的侵蝕,尚留于千里之外淡淡的脂粉香,追...
    妮的夏天閱讀 1,179評論 17 10
  • 原典閱讀 206評論 0 0