程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 如何判斷字符串是否為空串(2)

如何判斷字符串是否為空串(2)

編輯:關於C語言

進一步分析:

首先是Empty法,由於String.Empty是一個靜態只讀域,只會被創建一次(在靜態構造函數中)。但當我們使用Empty法進行判空時,.Net還會依次展開調用以下的方法,而後兩個方法內部還會進行對象引用判等!

public static bool Operator ==(string a, string b);

public static bool Equals(string a, string b);

private static unsafe bool EqualsHelper(string ao, string bo);

若使用General法判等的話,情況就“更勝一籌”了!因為.Net除了要依次展開調用上面三個方法之外,還得首先創建一個臨時的空字符串實例,如果你要進行大量的比較,這恐怕是想一想就很嚇人了!

而對於Length法,我們就可以繞過上面這些繁瑣的步驟,直接進行整數(字符串長度)判等,我們知道,大多數情況下,整數判等都要來得快(我實在想不出比它更快的了,在32位系統上,System.Int32運算最快了)!

另外,我們還可以看到,在EqualsHelper方法裡面.Net會先使用Length法來進行判等!可惜的是我無法獲得InternalLength方法的代碼。但我在Mono的源代碼裡面看到更簡明的實現:

class String
{
  private int length;

  public int Length
  {

    get
    {
      return length;

    }
  }

  // .
}

然而使用Length法進行字符串判空串時,有一點要注意的,就是你必須先判斷該字符串實例是否為空引用,否則將會拋出NullReferenceException異常!於是,我們有了一個經過改進的Length法:

void Foo(string bar)
{
  if ((bar != null) && (bar.Length == 0))
    //
}

3. 最後總結:

從上面的分析我們可以看到,使用Length法來進行字符串判空串是有著很大的性能優勢的,尤其在進行大量字符串判空時!當然首先得判斷字符串實例是否為空引用!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved