黑马程序员技术交流社区
标题:
关于null
[打印本页]
作者:
熊鑫
时间:
2013-4-19 16:14
标题:
关于null
string str=null 和 string str="" 一样不 不一样的话有什么区别。
作者:
HM邱刚权
时间:
2013-4-19 16:16
string str=null 是不给他分配空间的
和 string str="" 分配 长度为0的空间!两者当然不一样!
前者没有值 后者是等于长度为0的字符串
作者:
陈帅
时间:
2013-4-19 16:19
额,楼上回答完了~~ null没分配内存空间 空是有内存空间的~
而且数据库中的null是不知道的意思~~ 都不知道是个啥~~
作者:
vicoooo
时间:
2013-4-19 16:42
NULL代表声明了一个空对象,根本就不是一个字符串。
""代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。
作者:
王赟
时间:
2013-4-19 16:52
本帖最后由 王赟 于 2013-4-19 16:54 编辑
区别主要体现在编译器的检查上。在默认情况下,创建一个引用变量,CLR即将其初始化为null,表示不指向任何实例,所以本质上二者有相同的意义。
//编译器检测错误,使用了未赋值的obj
//object obj;
//编译器理解为执行了初始化操作,所以不引发编译时错误
object obj = null;
if (obj == null)
{
//运行时抛出NullReferenceException异常
Console.WriteLine(obj.ToString());
}
复制代码
事实上,将
static void Main(string[] args)
{
object o;
object obj = null;
}
复制代码
反编译为IL时,二者在IL还是存在一定差别的:
.medthod private hidebysig void Main(string[] args) cil managed
{
.entrypoint
.maxstack 1
.locals init(
[0] objcet o,
[1] objcet obj)
L_0000:nop
L_0001:ldnull
L_0002:stloc.l
L_0003:ret
}
复制代码
前者没有附加任何操作,后者通过一个ldnull指令推进一个空间给evaluation stack,而stloc则将空引用保留。
在.NET中,对null有如下规则和应用
1.null为引用类型变量的默认值,为引用类型的概念范畴。
2.null不等同归0 "" string.Empty,而表示一个空引用、
3.引用is或者as模式对类型进行判断和转换时,需要进一步对null进行检查。
4.判断一个变量师傅是null,可以用==或许!=等操作符来完成。
5.对任何值为null的变量操作,都会抛出NullReferenceException异常。
作者:
张松
时间:
2013-4-19 21:28
1、string aa;和string aa = null;一样。
他么都是声明了一个sting对象的名字aa(可以理解为C\C++中指向sting类型变量的指针,或者说引用),但是并没有赋予aa一个与之对应的实际对象(没有内存分配)。所以aa在这里什么都不是,等待分配。
2、string aa = String.Empty;和string aa = "";以及string aa;aa="";是一样的。
aa被声明为一个空的字符串。实际上是aa在这里代表了一个内容为空字符串的字符串对象。
3、究竟前面两种情况在使用中有什么不一样呢?
前者由于没有指向具体对象,所以在没有将它指向具体对象之前,不能用“.”运算符引用string类对象的很多方法和属性。
但是后者就可以。
使用 Empty 常量值初始化字符串可新建字符串长度为零的 String 对象。零长度字符串的字符串表示形式为 ""。使用 Empty 值(而不是 null)初始化字符串可以降低发生 NullReferenceException 的可能性。
空字符串是不包含字符的 System.String 对象的实例。在各种编程方案中经常会使用空字符串表示空白文本字段。可以对空字符串调用方法,因为它们是有效的 System.String 对象。相反,null 字符串并不引用 System.String 对象的实例,任何对 null 字符串调用方法的尝试都会生成 NullReferenceException
作者:
极限冰风
时间:
2013-4-19 21:48
String是引用类型,String str=null 没有创建内存空间,str中存放的是空引用指针;
String str="" 创建了内存空间,str中存放的是指向堆的引用指针
作者:
郑丹丹1990
时间:
2013-4-19 22:12
null就是不知道,""长度为0的字符串。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2