null和String.Empty的区别

er4gfg 2011-04-15 05:18:26
null和String.Empty的区别是什么
是不是二者可以完全替代

请详细说明,谢谢!!!
...全文
221 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
ktei2008 2011-04-15
  • 打赏
  • 举报
回复
这个问题。。。怎么会有人问。。。
  • 打赏
  • 举报
回复
null 是空(引用),“无效的”
string.Empty是指向系统预定义的常量,这里的“指向”是指在内存栈上会有一个引用,效果同""是一样
string s = null, str = string.Empty;
s.Length //抛空引用异常
str.Length //结果返回0
Jalan.Wang 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 shinnakoruru 的回复:]
我发现遇到简单高分问题忽然冒出很多人回答,偏门的问题连个帮顶的都没有,人还真是好面子啊
[/Quote]

不是别人好面子, 你都说了是偏门的问题,帮顶只是给点安慰,但不能解决根本问题呀,论坛里只要能帮上都会帮的,只是每个人的时间问题
rekym 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 lwbjyl 的回复:]
这样说吧,
string temp = "a";
上面的意思是这样的:
1、在堆中创建一个对象 temp
2、在栈中开辟一块空间存放引用,
3、再到string池中放一个“a”;
4、最后通过引用把对象temp与池中的值“a”连接起来,那么temp的值就是"a"了

然而 string temp = null;
表示
1、在堆中创建一个对象 temp
2、引用为空 ,可以理解……
[/Quote]

+1
Jalan.Wang 2011-04-15
  • 打赏
  • 举报
回复
这样说吧,
string temp = "a";
上面的意思是这样的:
1、在堆中创建一个对象 temp
2、在栈中开辟一块空间存放引用,
3、再到string池中放一个“a”;
4、最后通过引用把对象temp与池中的值“a”连接起来,那么temp的值就是"a"了

然而 string temp = null;
表示
1、在堆中创建一个对象 temp
2、引用为空 ,可以理解为没有为对象分配 引用;
3、也没有分配值(当然,根本 不用分配值,因为没有引用,就不知道指向常量池中的哪个值)

string temp = string.Empty;
1、在堆中创建一个对象 temp
2、在栈中开辟一块空间存放引用,
3、通过引用 指向 常量池中一个空的值;

希望LZ能够理解

xrongzhen 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 shinnakoruru 的回复:]
我发现遇到简单高分问题忽然冒出很多人回答,偏门的问题连个帮顶的都没有,人还真是好面子啊
[/Quote]

简单的问题,能说明白透彻,也很牛 绝大多数都是似懂非懂,只会用,不懂原理
ycproc 2011-04-15
  • 打赏
  • 举报
回复
一个是内存上null
一个是字节为空
hackerdream 2011-04-15
  • 打赏
  • 举报
回复
大家说的都很清楚了,是两个不同的东西。
vrhero 2011-04-15
  • 打赏
  • 举报
回复
所有引用类型实例的初始值都为null,包括字符串...字符串也是引用类型...

再重复一次:赋null值不分配任何内存,实例在栈上为引用分配的内存是另一码事...赋string.Empty值就是赋""值,""是常量,string.Empty是预定义的只读变量,指向字符串常量""...string.Empty就是""...
er4gfg 2011-04-15
  • 打赏
  • 举报
回复
所有引用类型的初始值都为null还是string.Empty 还是"" ??
rx78gp01 2011-04-15
  • 打赏
  • 举报
回复
不过貌似string一般声明除非定义成null不然默认都是""的吧
rx78gp01 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 er4gfg 的回复:]
引用 3 楼 rx78gp01 的回复:
要做判断可以用string.isnullEmpty()

if(TextBox1.Text ==string.Empty )与if(TextBox1.Text ==null)那效果是一样的吧
,我试过,后者没有报错
是不是一样的?
[/Quote]对他判断了两种情况
shine_fly 2011-04-15
  • 打赏
  • 举报
回复
最直接的:
Empty不分配存储空间
NULL分配一个长度为空的存储空间
一般用string.Empty
andyalex 2011-04-15
  • 打赏
  • 举报
回复
null是空引用,对象是不存在的。
string.Empty 对象存在,是空字符串
gaocy1 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 shinnakoruru 的回复:]
我发现遇到简单高分问题忽然冒出很多人回答,偏门的问题连个帮顶的都没有,人还真是好面子啊
[/Quote]
呵呵……毕竟菜鸟比较多啊。你懂的。。。
gaocy1 2011-04-15
  • 打赏
  • 举报
回复
呵呵……毕竟菜鸟比较多啊。你懂的。。。
ShinNakoruru 2011-04-15
  • 打赏
  • 举报
回复
我发现遇到简单高分问题忽然冒出很多人回答,偏门的问题连个帮顶的都没有,人还真是好面子啊
vrhero 2011-04-15
  • 打赏
  • 举报
回复
TextBox1.Text==null恒为false...

更正一下...
vrhero 2011-04-15
  • 打赏
  • 举报
回复
不一样...TextBox.Text天然不可能为null,当然没错...但是逻辑是错的,TextBox1.Text==null恒为true...
er4gfg 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 rx78gp01 的回复:]
要做判断可以用string.isnullEmpty()
[/Quote]
if(TextBox1.Text ==string.Empty )与if(TextBox1.Text ==null)那效果是一样的吧
,我试过,后者没有报错
是不是一样的?
加载更多回复(11)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧