我理解的string s = string.Empty,string s = null和string s = ""三者之间的区别

想必对于那些不太重视.NET基础的朋友们来说,对于知道上述三者之间的详细区别,或许还真有点难度。
    我第一次碰到这个问题是在一次面试的时候,下面就允许我说说我的愚见:
    首先,先说说string s = null和string s = ""二者间的区别。从字面意义上理解,二者都是给变量初始化为空,前者可以联想Object,那么可以说“初始化为空引用”;后者呢可以说“初始化为空值”。看来二者间确实存在一种“不可告人的秘密”,当然这种区别仅仅是我们从肤浅的感性认识上的理解。从理论上说string s = null是不给它分配存储空间的,而string s = ""是给它分配一个长度为空的存储空间。
本人愚见,既然我们从感性上认识string s = ""为“空值”,而且String类型也是引用类型,那么它当然应该在堆上占个“坑位”,里面存个空值。而前者就不一样了,既然认为是“空引用”,那么它99.9%可能会在堆上占个“坑位”里面有个指针不指向任何地方。
    其次,我们说说string s = string.Empty和string s = null的区别。在这里还想说说string和String的区别,二者我们在Visual Studio环境下开发时,根本看不出来区别,因为通过智能感知反馈给我们的信息都是“表示文本,既一系列Unicode字符”。呵呵蒙了吧!我们知道,在.NET中所有引用类型和值类型都是继承自一个根类型Object,而这些“东西的”赖以生存的环境就是CTS,因为它们是在CTS中定义的,同时CTS也是依赖CLR的,所以没有CLR也就没有CTS。言归正传,我的愚见是String是大哥,因为他是在CTS中就定义好的东西了,是基于CLR的。而string仅仅是C#语法中一个String的变体,是基于C#的。二者好像没什么区别,只是在不同的环境下,特定的一种符号而已,不知道这么理解对不对?呵呵
好了,string.Empty和null是这样的,他俩都表示空,前者是一个空字符串,只不过这个字符串的值为空,但是在内存的堆中是有准确指向的,而后者只是定义了一个string 类型的引用,变量并没有指向任何地方,还是那句话它99.9%可能会在堆栈上占个“坑位”里面有个指针不指向任何地方。在使用前如果不实例化,都将报错。
    最后,通过上述我们还可以知道有3种方法可以表示字符串为空,s.Length == 0 , s == string.Empty , s == "" ,三者的性能也随着逐渐降低。
    希望有不对的大家能够及时指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值