Java 判斷字串是否為空白的三種方法.

來源:互聯網
上載者:User

/*對比s == null || s.equals("")
   *    s == null || s.length()<=0
   *    s == null || s.isEmpty()
   */

方法一: 最多人使用的一個方法, 直觀, 方便, 但效率很低.

方法二: 比較字串長度, 效率高, 是我知道的最好一個方法.

方法三: Java SE 6.0 才開始提供的方法, 效率和方法二幾乎相等, 但出於相容性考慮, 推薦使用方法二.

以下代碼在我機器上的運行結果: (機器效能不一, 僅供參考)

function 1 use time: 141ms

function 2 use time: 46ms

function 3 use time: 47ms

public class CompareStringNothing {

String s = "";

long n = 10000000;

private void function1() {

long startTime = System.currentTimeMillis();

for(long i = 0; i<n; i++) {

   if(s == null || s.equals(""));

}

long endTime = System.currentTimeMillis();

System.out.println("function 1 use time: "+ (endTime - startTime) +"ms");

}

private void function2() {

long startTime = System.currentTimeMillis();

for(long i = 0; i< n; i++) {

   if(s == null || s.length() <= 0);

}

long endTime = System.currentTimeMillis();

System.out.println("function 2 use time: "+ (endTime - startTime) +"ms");

}

private void function3() {

long startTime = System.currentTimeMillis();

for(long i = 0; i <n; i++) {

   if(s == null || s.isEmpty());

}

long endTime = System.currentTimeMillis();

System.out.println("function 3 use time: "+ (endTime - startTime) +"ms");

}

public static void main(String[] args) {

CompareStringNothing com = new CompareStringNothing();

com.function1();

com.function2();

com.function3();

}

}

我使用的equals()、length()和JDK6之後的 isEmpty(),在效能上原文分析結果是equals()效能幾乎是length()的3.5倍,這個我不敢苟同,我實際測試的結果如下:

equals use time: 110ms
length use time: 78ms

還沒到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()  <<  length() / isEmpty()

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.