這個是做Java開發最經常遇到的問題,然而很多人的判斷方法并不是正確的,給出幾個常見案例,再提出我的個人方法吧。
方法一: 最多人使用的一個方法, 但效率很低:
if(s == null || s.equals(""));
方法二: 比較字符串長度, 效率高:
if(s == null || s.length() == 0);
方法三: Java SE 6.0 才開始提供的方法, 效率和方法二幾乎相等, 但出于兼容性考慮, 推薦使用方法二.
if(s == null || s.isEmpty());
方法四: 這是一種比較直觀,簡便的方法,而且效率也非常的高,與方法二、三的效率差不多:
if (s == null || s == "");
這四種方法是最常見的了,百度搜索一大堆,幾乎都是雷同的,解釋一下效率問題,上源代碼
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObjectinstanceof String) {
String anotherString = (String)anObject;
int n =value.length;
if (n == anotherString.value.length) {
char v1[] =value;
char v2[] = anotherString.value;
int i =0;
while (n-- !=0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
可以看見使用equal()方法需要先進行判斷目標比對對象的類型,然后再進行其它操作,同時還要遍歷String對象的每一個char,查看是否相同,length()直接返回String對象的Count屬性,效率更高。
但是我個人是更推薦if(null == s || s.length()==0)或者if(null == s || "".equals(s))這種寫法,像s.equals("")這種判斷的話如果s為null就會出現空指針異常,但是改成"".equals(s)這種寫法的話,則即使s為null也不會有問題。也防止一不小心手滑了就寫成if(s=null),在不少語言里這是可以編譯運行的,并且得不到你希望的結果。所以在Java中進行比較就最好把常量放在左邊。