注册 登录
编程论坛 C# 论坛

求教老师:变量的 赋值 - “ ” 或 null

learnerok 发布于 2013-10-19 15:30, 1831 次点击
求教老师:

c#的 变量赋值,比如:

int a = " ";

int b = null;

我的问题是,什么情况下 赋值 “ ”,什么情况下 赋值 null ?

(我知道,如果赋值为 “ ”,内存会对这个变量留出空间;而 null ,则内存没有。)

谢谢答疑老师先!
20 回复
#2
afdoa832013-10-19 20:13
String类型变量可以赋值" "。
可空类型变量可以赋值null。
例如
string txt = " ";
int? Enum = null;  //int? 是预定义类型int的可空形式。
详细查阅C#可空类型
#3
learnerok2013-10-19 21:50
感谢 afdoa83 老师回复!!!

我试了一下,字符串类型 既可以 赋值为 "",也可以赋值为 null,即 string a = ""; 或 string a = null;

我搞不懂的是,什么情况下 使用 "",什么情况下 使用 null 呢???

我查了MSDN,里面好像没有对 "" 赋值做解释?

谢谢 afdoa83老师 !!!

[ 本帖最后由 learnerok 于 2013-10-19 21:53 编辑 ]
#4
wp2319572013-10-19 22:02
大部分情况下 " "代表一个空格  而""则代表null
#5
learnerok2013-10-19 22:08
感谢 wp231957老师 帮助!!!

您的意思是,string a = ""; 或 string a = null; 这两个 意思是相同的?

但好像是,如果赋值 为 "" ,则内存会分配空间;而null,则内存不会分配空间。

所以他们应该是有区别的,只是不懂何种情况 如何使用啊?!
#6
afdoa832013-10-20 19:23
null代表着未被初始化
#7
learnerok2013-10-20 19:53
感谢 afdoa83大侠的帮助!!!

能再 详细点说明一下,声明 字符串 变量 时,何时用 "",何时用null 吗?

比如说,您是什么情况下 用"" ,什么情况下 用 null 的?

谢啦!!!

[ 本帖最后由 learnerok 于 2013-10-20 20:11 编辑 ]
#8
TonyDeng2013-10-20 23:37
從你寫過的程序的經驗,覺得需要超出整形數集表達一個整型數據的情形是什麽?也就是說,在什麽情形下需要一個int數據表示它是無效的數據?考慮如下情形:對一個整型數據,我們經常用0或-1來表示這是結束或特殊情況(比如出錯),但問題是在某些場合,0和-1也是合法的數據,你不能佔用這樣的數據去表示出錯或特殊情形,那麽,null就派上用場了。

但是要注意:C#儘管允許給値類型數據賦値null,但本質上null是對引用型數據的引用,當値數據被暗中當引用數據使用時,會有裝箱/拆箱操作,是會影響效率的。一般正常的代碼,極少這樣用。在程序經驗不多的時候,探討這種問題屬於偏門,沒多大意義。

int與string不同,前者是値類型數據,後者原先就是引用型數據,天然可以用null,而前者用null是要作特殊處理的。語言的糖果雖然很甜,但不要濫用。

[ 本帖最后由 TonyDeng 于 2013-10-20 23:44 编辑 ]
#9
learnerok2013-10-21 00:49
感谢 TonyDeng老师 的指导帮助,我要好好读一下理解您的回复内容。!!!

接受到您好多次的帮助,感动中!!!


#10
learnerok2013-10-21 00:59
我试了一下,字符串类型 既可以 赋值为 "",也可以赋值为 null,即 string a = ""; 或 string a = null;

我搞不懂的是,什么情况下 使用 "",什么情况下 使用 null 呢???

我查了MSDN,里面好像没有对 "" 赋值做解释?

=====================

TonyDeng老师,您能帮我指点一下上面的问题吗,谢谢您先!!!
#11
tlliqi2013-10-21 08:24
打个比方:一个空玻璃杯,你不能说它里面什么都没有,因为里面有空气,当然也可以把它弄成真空,null与" "的区别就象真空与空气一样。

#12
learnerok2013-10-21 12:14
以下是引用tlliqi在2013-10-21 08:24:01的发言:

打个比方:一个空玻璃杯,你不能说它里面什么都没有,因为里面有空气,当然也可以把它弄成真空,null与" "的区别就象真空与空气一样。
感谢 tlliqi老师的回复,您的意思俺在上面也说到了,俺只是不明白下面的问题

“我搞不懂的是,什么情况下 使用 "",什么情况下 使用 null 呢???”

或者说,您什么情况下 使用 "",什么情况下使用 null 呢?

谢谢您,先!!!
#13
TonyDeng2013-10-21 22:05
以下是引用learnerok在2013-10-21 00:59:01的发言:

我试了一下,字符串类型 既可以 赋值为 "",也可以赋值为 null,即 string a = ""; 或 string a = null;

我搞不懂的是,什么情况下 使用 "",什么情况下 使用 null 呢???

我查了MSDN,里面好像没有对 "" 赋值做解释?

=====================

TonyDeng老师,您能帮我指点一下上面的问题吗,谢谢您先!!!

對字符串而言,""是空串,即沒有內容的空字符集,但null是連字符串都不是。null是一個空指針或空引用,意思是對象不存在。什麽時候用null呢?當你需要指出(字符串)對象不存在時,就用了。
#14
learnerok2013-10-22 00:31
感谢 TonyDeng老师 的指导 !!!

能举个例子吗,说明什么时候需要指出對象不存呢?

有时候看到 在方法外面将 字符串赋值 为"", 有时候又是 null, 真是不解为什么啊?

谢谢老师先!!!
#15
TonyDeng2013-10-22 00:44
字符串是引用對象,它要在堆中分配空間,當對象未創建(即未分配空間)時,或未初始化時,就需要令指向它的指針或引用為null,以告訴使用者,這個對象目前不能使用。並非僅對字符串,所有對象都可以賦値為null,意思就是這個對象是不可用的,需要初始化。通常的建議,如果不是在聲明時同時給對象初始化,則把它明確賦値為null,以避免野指針,代碼要使用對象,習慣性地檢查一下它是否null再使用是個好主意。對C/C++來說,對象從內存中釋放後,也應主動給指針賦値為nullptr,防止後續代碼誤用野指針所指向的數據,C#不需要釋放,但若你決定廢棄某個對象時,順便給它的引用賦値為null,也是良好的習慣。
#16
weikaijin2013-10-22 11:24
回复 10楼 learnerok
null为空,不分配相应的内存
""为空字符串,分配内存,是一个内容为空的字符串
#17
learnerok2013-10-22 11:56
以下是引用TonyDeng在2013-10-22 00:44:12的发言:

字符串是引用對象,它要在堆中分配空間,當對象未創建(即未分配空間)時,或未初始化時,就需要令指向它的指針或引用為null,以告訴使用者,這個對象目前不能使用。並非僅對字符串,所有對象都可以賦値為null,意思就是這個對象是不可用的,需要初始化。通常的建議,如果不是在聲明時同時給對象初始化,則把它明確賦値為null,以避免野指針,代碼要使用對象,習慣性地檢查一下它是否null再使用是個好主意。對C/C++來說,對象從內存中釋放後,也應主動給指針賦値為nullptr,防止後續代碼誤用野指針所指向的數據,C#不需要釋放,但若你決定廢棄某個對象時,順便給它的引用賦値為null,也是良好的習慣。

感谢 TonyDeng老师,你的回复我已经收藏,是这个问题目前我得到解答的最具体,感动啊!!!

您能给俺举个例子,说使用 "" 和 null 的不同情况吗?以便今后我运用到编写代码实践中,不胜感谢!!!
#18
TonyDeng2013-10-22 12:02
13樓告訴你了啊,當需要指出對象不可用時,就賦値null。如果字符串確實沒有內容,就賦値"",這是它的真實內容,確實是沒任何字符了,當然是空串啦。""字符串,null不是字符串。
#19
learnerok2013-10-22 12:24
以下是引用TonyDeng在2013-10-22 12:02:50的发言:

13樓告訴你了啊,當需要指出對象不可用時,就賦値null。如果字符串確實沒有內容,就賦値"",這是它的真實內容,確實是沒任何字符了,當然是空串啦。""是字符串,null不是字符串。

感谢老师的教诲!!!

恕在下笨拙!实在需要举例来加深学习啊。

比如:何时需要 “指出對象不可用”,需要赋值为null 呢?

能给俺分别 给出两个方法,说明:当这样的方法时,因 ... 所以需要将变量赋值为 "" ; 而另一个方法,因... 所以这里需要将变量赋值为null。

感谢您!!!
#20
TonyDeng2013-10-22 12:31
聲明了一個字符串變量,但暫時還沒有賦予內容,或者廢除一個字符串變量,此時就給它賦値null。當字符串確實沒有字符時,亦即需要它的長度為零時,就賦値""。
#21
learnerok2013-10-22 13:25
以下是引用TonyDeng在2013-10-22 12:31:12的发言:

聲明了一個字符串變量,但暫時還沒有賦予內容,或者廢除一個字符串變量,此時就給它賦値null。當字符串確實沒有字符時,亦即需要它的長度為零時,就賦値""。

收藏了!!!

万分感谢TonyDeng老师的孜孜教导!!!
1