首先看下面一段代碼:
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
}
}