java equals 判断空_Java 判断字符串是否为空的三种方法与性能分析
[java中判斷字符串是否為數字的三種方法? 1>用JAVA自帶的函數 public static boolean isNumeric(String str){ ? for (int i = str.length();--i>=0;){?? ?? if (!Charact
Java 判斷字符串是否為空的三種方法與性能分析
Java編程過程中經常會涉及到判斷空字符串的問題,對于我而言經常使用的是equals()方法,代碼如下:
if(target != null && !"".equals(target)){
System.out.println("target字符串不為空");
}
碰巧昨天見到一篇關于判斷Java空字符串三種方法的比較,突然覺得自己在平時里做的還不夠深入,沒有對代碼的性能進行極致優化,自己要反思與提高。
原文提到的三種方法分別是:我使用的equals()、length()和JDK6之后的 isEmpty(),在性能上原文分析結果是equals()性能幾乎是length()的3.5倍,這個我不敢茍同,我實際測試的結果如下:
equals use time: 110ms
length use time: 78ms[以下是 Java 判斷字符串是否為空的三種方法.?方法一: 最多人使用的一個方法, 直觀, 方便, 但效率很低.方法二: 比較字符串長度, 效率高.?方法三: Java SE 6.0 才開始提供的
還沒到2倍,于是乎我查看了String的源碼:
public int length() {
return count;
}
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
通過源碼我很容易發現length()的效率要高于equals(),length()直接返回String對象的Count屬性,而equals()需要先進行判斷目標比對對象的類型,然后再進行其它操作,同時還要遍歷String對象的每一個char,查看是否相同。
同時原文提到的JDK6提供的String .isEmpty()方法我沒有安裝JDK6,所以只能替代行的查看了Commons-lang-2.6內StriingUtils的該方法,我相信JDK6的源碼與它應該是相同的,源碼如下:
public static boolean isEmpty(String str)
{
return (str == null) || (str.length() == 0);
}
可見isEmpty()同樣也使用了length()方法,呵呵~只能說apache不傻。
綜上我們可以清晰的得出三者性能上的優劣。equals()? <
總結
以上是生活随笔為你收集整理的java equals 判断空_Java 判断字符串是否为空的三种方法与性能分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数时间,python之时间
- 下一篇: 计算机主机内部由什么组成,计算机是由主机