日期:2014-05-19  浏览次数:20853 次

string s=null与string s="" 送分问题
String       s=null;//null是未分配堆内存空间      
    String       a;//分配了一个内存空间,没存入任何对象      
    String       a= " ";//分配了一个内存空间,存了一个字符串对象


如果object   obj=null
引用的时候会提示错误对象未被引用,也就是说只要分配空间才能引用。是这样吗??
那为什么string   s=null;   还可以引用??未分配堆内存空间     还能引用的吗??
两个不同的是一个是引用类型~一个是值类型..难道值类型不用分配空间也能直接使用?

------解决方案--------------------
string s;和string s=null;错误提示是不同的,前者是编译时错误,而后者在编译时不会产生错误,而是在这样(s.Length)使用时出现空引用异常。
string s = "a ";相当于string s = new string( "a ");这句话导致指针s指向了一个内存区域。而string s = null;也会导致s指向一个地址,只不过这个地址是0x0,这个地址被保留总是作为空引用的象征。
string s;如果在编译阶段不出现错误,他实际上相当于string s = null;任何类型都会有一个默认值(比如int类型的默认值是0,这可以通过default(type)得到某个类型的默认值)。因此string s;产生的错误仅仅是编译错误,也就是编译器的要求。