String Empty,NULL和 的區別

2021-04-28 19:49:45 字數 2006 閱讀 5788

string.empty,null和""的區別

string.empty就相當於""

一般用於字串的初始化

比如:

string a;

console.writeline(a);//這裡會報錯,因為沒有初始化a

而下面不會報錯:

string a=string.empty;

console.writeline(a);

或者用於比較:

if(a=="")

if(a==string.empty)

上面兩句是一樣的效果。

string.empty不分配儲存空間

""分配乙個長度為空的儲存空間  

所以一般用string.empty

為了以後跨平台,還是用string.empty

在 c# 中,大多數情況下 "" 和 string.empty 可以互換使用。比如:

string s = "";

string s2 = string.empty;

if (s == string.empty)

if語句成立

string.empty和null,這兩個都是表示空字串,string str1= string.empty,這樣定義後,str1是乙個空字串,空字串是乙個特殊的字串,只不過這個字串的值為空,在記憶體中是有準確的指向的,string str2=null,這樣定義後,只是定義了乙個string 類的引用,str2並沒有指向任何地方,在使用前如果不例項化的話,都將報錯。textbox1.text的值為零長度字串 ""。

判定為空字串的幾種寫法,按照效能從高到低的順序是:

s.length == 0      優於 s == string.empty      優於 s == ""

判斷字串是否為空最好的方法就是    s.length==0 !

c#中的空值的判斷較麻煩,不象在vb6中那麼簡單,這些各種空值的判斷和理解對不熟悉的人來說,可能很麻煩,現就我在使用過程中的一點體會和大家共同分享。

(1)null

null 關鍵字是表示不引用任何物件的空引用的文字值。null 是引用型別變數的預設值。那麼也只有引用型的變數可以為null,如果 int i=null,的話,是不可以的,因為int是值型別的。

(2)dbnull

dbnull在dotnet是單獨的乙個型別,該類只能存在唯一的例項,dbnull.value,dbnull唯一作用是 可以表示資料庫中的字串,數字,或日期,為什麼可以表示原因是dotnet儲存這些資料的類(datarow等)都是以 object 的形式來儲存資料的。對於 datarow , 它的 row[column] 返回的值永遠不為 null , 要麼就是具體的為column 的型別的值 。 要麼就是 dbnull 。 所以 row[column].tostring() 這個寫法永遠不會在tostring那裡發生nullreferenceexception。dbnull 實現了 iconvertible 。 但是,除了 tostring 是正常的外,其他的to***都會丟擲不能轉換的錯誤。

(3)""和string.empty

這兩個都是表示空字串,其中有乙個重點是string str1="" 和 string str2=null 的區別,這樣定義後,str1是乙個空字串,空字串是乙個特殊的字串,只不過這個字串的值為空,在記憶體中是有準確的指向的,string str2=null,這樣定義後,只是定義了乙個string 類的引用,str2並沒有指向任何地方,在使用前如果不例項化的話,都將抱錯。

(4)convert.isdbnull()

convert.isdbnull()返回有關指定物件是否為 dbnull 型別的指示,即是用來判斷物件是否為dbnull的。其返回值是true或flase。

好了說了這麼多,也不知道說明白了沒有,其實這些廣義上的"空值"理解了後,還是有很大的區別的,甚至根本就沒有關係。完全是兩個概念。

String Empty,NULL和 的區別

string.empty不分配儲存空間 分配乙個長度為空的儲存空間 所以一般用string.empty 為了以後跨平台,還是用string.empty 在 c 中,大多數情況下 和 string.empty 可以互換使用。比如 strings string s2 string empty if s ...

堆區和棧區的區別

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...

棧區和堆區的區別

一直以來總是對這個問題的認識比較朦朧,我相信很多朋友也是這樣的,總是聽到記憶體一會在棧上分配,一會又在堆上分配,那麼它們之間到底是怎麼的區別呢?為了說明這個問題,我們先來看一下記憶體內部的組織情況 從上圖可知,程式占用的記憶體被分了以下幾部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引...