天天看點

Java中字元串相等與大小比較

轉貼: http://mcmoo.blog.51cto.com/692320/662036

在C++中,兩個字元串比較的代碼可以為:

(string1==string2)

但在java中,這個代碼即使在兩個字元串完全相同的情況下也會傳回false

Java中必須使用string1.equals(string2)來進行判斷

補充

如果:

string s1="Hello";

string s2="Hello";

則(s1==s2)=true;

因為他們指向的同一個對象。

String s1=new String("Hello");

String s2=new String("Hello");

則(s1==s2)=false

如果把其他變量的值賦給s1和s2,即使内容相同,由于不是指向同一個對象,也會傳回false。是以建議使用equals(),因為equals比較的才是真正的内容

例如:

String string1=new String( "aaa" );

String string2=new String( "aaa" );

這兩個字元串當然應該是相等的。

如果用表達式string1==string2,則該表達式的值為false

如果用表達式string1.equals(string2),則該表達式的值為true

是以應該用string1.equals(string2),在if語句中就是

if(string1.equals(string2)==true) //字元串相等,……

string1==string2,是值相等,而且記憶體位址也相等,是完全的相等

string1.equals(string2)為true,隻是值相等

如果比較字元串的大小使用:str1.compareTo(String str2)

按字典順序比較兩個字元串。該比較基于字元串中各個字元的 Unicode 值。按字典順序将此 String 對象表示的字元序列與參數字元串所表示的字元序列進行比較。如果按字典順序此 String 對象位于參數字元串之前,則比較結果為一個負整數。如果按字典順序此 String 對象位于參數字元串之後,則比較結果為一個正整數。如果這兩個字元串相等,則結果為 0;compareTo 隻在方法 equals(Object) 傳回 true 時才傳回 0。

這 是字典排序的定義。如果這兩個字元串不同,那麼它們要麼在某個索引處的字元不同(該索引對二者均為有效索引),要麼長度不同,或者同時具備這兩種情況。如 果它們在一個或多個索引位置上的字元不同,假設 k 是這類索引的最小值;則在位置 k 上具有較小值的那個字元串(使用 < 運算符确定),其字典順序在其他字元串之前。在這種情況下,compareTo 傳回這兩個字元串在位置 k 處兩個char 值的差,即值:

this.charAt(k)-anotherString.charAt(k)

如果沒有字元不同的索引位置,則較短字元串的字典順序在較長字元串之前。在這種情況下,compareTo 傳回這兩個字元串長度的差,即值:

this.length()-anotherString.length()