轉貼: 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()