Java中字符串相等與大小比較
在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()