string str="" 和string str=null 和string str  有什么区别,分别在什么时候用到?

解决方案 »

  1.   

    一个是空串,
    一个是空引用,
    一个是定义而未声明,应该会有warning
      

  2.   

    string str="",表示一个空串,被实列化了,占用了内存空间,
    string str=null,表示一个空串,没有占用了空间,
    string str 一个是定义而未声明.
    不知道我的理解对不.
      

  3.   

    第一个已经实例化一个实例,但是内容为空字符串
    第二个为空引用
    第三个只定义而未被初始化,java中一般会有警告
      

  4.   

    string str="",表示一个空串,被实列化了,占用了内存空间,
    string str=null,表示一个空串,没有占用了空间,
    string str 一个是定义.最好初始化成
    string str = string.Empty,养成好习惯呀
      

  5.   

    如果地址是:xxx.aspx?id=aaa
    string id=Request.Querystring["id"]
    id=aaa,不为空,如果地址是:xxx.aspx
    string id=Request.Querystring["id"]
    id经过if语句判断为:id=null,id!=""
    这是怎么回事?所以就是不明白id=null 和id=""的区别?请高手继续解释
      

  6.   

    string str="",表示一个空串,被实列化了,占用了内存空间,
    string str=null,表示一个空引用,没有占用了空间,
    string str 这个我认为和第一个是一样的效果。或string.empty.因为C#里边你不初始化的话会有一个默认值。不知道我想的对不对,
    在做TextBox时候就知道了。你不要输入任何东西。如果你写成
    if(textBox.text==null)
    MessageBox.show();
    上边的不会弹出对话框来的,
      

  7.   

    而写成.text==""或string.empty就会了
      

  8.   

    null 表示一个空引用,
    "" 表示一个空字符串,
    所以 null != ""
      

  9.   

    xxx.aspx?id=aaa
    是aspx中页面之间的传值,因为已经把aaa传过来了,所以id当然就不是空了,
    id=“”的意思是id已经在内存中有存储空间了,只不过这个空间里什么都没有。
    但是id=null的意思是根本就没有给id在内存中分配空间。此时的id是不能使用的
      

  10.   

    还是没有理解我的意思,
    如果输入地址:http://localhost/web/ua.aspx?id=aaa
    string id=Request.Querystring["id"]
    id=aaa,不为空,如果输入地址:http://localhost/web/ua.aspx
    是同一个页面,只是后面没有参数,
    string id=Request.Querystring["id"]
    id经过if语句判断为:id=null,id!=""
    这是怎么回事?所以就是不明白id=null 和id=""的区别?请高手继续解释
      

  11.   

    这没有什么问题啊。1:
    如果输入地址:http://localhost/web/ua.aspx?id=aaa
    string id=Request.Querystring["id"]
    id=aaa,不为空,这正常啊,应该是这样啊,这个时候是有id这个变量的,且内容为aaa所以id=aaa,不为空 。2:
    如果输入地址:http://localhost/web/ua.aspx
    是同一个页面,只是后面没有参数,
    string id=Request.Querystring["id"]
    id经过if语句判断为:id=null,id!=""
    这是怎么回事?这个时候参数id是没有的。
    所以你接受的时候 id应该为null。但有一点null 和""是不同的,是两个东西。所以第二个情况下没有参数id为null,但null!=""
    所以你判断的结果是id=null,但id确实不等于""(因为null和""是两个概念)这没有什么问题啊!!!明白了吧?
      

  12.   

    null是说明不存在,反映到内存里就是该对象还没有对应的指向的内存。但""是说该对象已经存在,也有对应指向的内存,只不过这个指向反应出来的内容是一个空字符串。就好象0和没有(不存在)的区别一样。
      

  13.   

    再来个容易理解的:你想生孩子,然后还先给你孩子想了个名字叫小A。 这个时候小A实体还没有正式存在,只是说了,你要生个孩子,且这个孩子叫小A但事实上A == null等哪天你的小虫子找到窝了,一个实体诞生了。
    这个时候小A 的实体就存在的,指向你老婆的肚子。但这个时候,你还没见到你确切的孩子。只能说,你“有”孩子了。所以小A=“”等哪天他呆不住,冒出来了。
    小A 就是那个东西了。也不为空,也不为null了。——好象更乱七八糟的了。
      

  14.   

    string str = null;你说这个分配了内存没有
      

  15.   

    string str="": 表示一个空串,其值被存储在托管堆中。一般连接字符串的话这样写比较方便,但是不见意。
    string str=null: 空引用,不引用任何对象。一般用于在方法中存放并返回一个值。
    string str : 如果声明为成员字段编译器会给它一个初值null,如果是局部变量编译器会把它当成错误来看待,一般用于成员字段才这样写的,不然你想怎么样?
    //-----------------------------
    string str = null;你说这个分配了内存没有
    =============================
    理论上是肯定分配了内存的了,不然的话编译器用什么来辨别null呢。就像这个一样:
    int i;
    首先,该语句声明了int变量i。编译器不会让我们使用这个变量,(成员字段除外)除非我们用一个值初始化了该变量。但这个声明会在堆栈中给它分配4个字节,以保存其值。
      

  16.   

    string str="": 表示一个空串,其值被存储在托管堆中。一般连接字符串的话这样写比较方便,但是不见意。
    string str=null: 空引用,不引用任何对象。一般用于在方法中存放并返回一个值。
    string str : 如果声明为成员字段编译器会给它一个初值null,如果是局部变量编译器会把它当成错误来看待,一般用于成员字段才这样写的,不然你想怎么样?
    //-----------------------------
    string str = null;你说这个分配了内存没有
    =============================
    理论上是肯定分配了内存的了,不然的话编译器用什么来辨别null呢。就像这个一样:
    int i;
    首先,该语句声明了int变量i。编译器不会让我们使用这个变量,(成员字段除外)除非我们用一个值初始化了该变量。但这个声明会在堆栈中给它分配4个字节,以保存其值。
    -------------------------------
    String 是引用类型;
    int 是值类型
    两者在内存的结构是不一样的
      

  17.   

    string str="",表示一个空串,被实列化了,占用了内存空间,
    string str=null,表示一个空引用,没有占用了空间,
    string str 这个我认为和第一个是一样的效果。或string.empty.因为C#里边你不初始化的话会有一个默认值。不知道我想的对不对,
    在做TextBox时候就知道了。你不要输入任何东西。如果你写成
    if(textBox.text==null)
    MessageBox.show();
    上边的不会弹出对话框来的,
    ====================================
    系统已经自动执行了testBox 空间的构造函数所以你的对话框不会谈出来
      

  18.   

    String 是引用类型;
    int 是值类型
    两者在内存的结构是不一样的如果是在C#里面String,int都是引用类型
      

  19.   

    string a = null; // now a Type : null  (A是空类型,不在是STRING类了, 也可以说是VOID类型[这个类型现在就不讨论了,超出C#的范畴])
    string a = "";   // now a Type : string.empty (依然是 STRING 类)
      

  20.   

    上面写错了,因该是
    string a = "";   // now a Type : string (依然是 STRING 类)[empty 只是一个空值的实例]
    string a = ""; 
    a = string.empty; //实际上内存中已创建两个 string.empty
      

  21.   

    String 是引用类型;
    int 是值类型
    两者在内存的结构是不一样的
    ==========================
    你的意思是说:“两者在内存的结构是不一样的”就可以推出它不占内存空间?还有,如果有不占内存空间的代码或者不占资源的代码的话,你说它存放哪里呀,存放在空气里?随便打一行代码,只要它被编译执行过,它就一定占用过内存!如果有不谁写出来的代码执行时是不占资源的,那么此人肯定是在意念中展开代码的编译与运行的。
      

  22.   

    书上说null为空引用或者空指针,它们不指向任何对象或者不指向任何内存地址,从而我们就认为它不占任何资源,也不占内存。个人认为:它们肯定是占用内存空间的,因为在编写这些计算机语言的牛人们,他们不想让我们知道它的底层到底是怎么实现的,或者根本没有必要让我们知道它的底层是怎么实现的,但是为了让我们更好的理解这个概念,他们就搬出了这种说法:“不指向任何引用,不指向任何内存空间地址”,虽然他们这样说,但是他们并没有说根本不占内存空间呀,只是它实现的方法或者机制让我们感觉到好像它根本没有占用内存。总之一句话:从唯物主义的观点来说,执行不占资源或者根本不占用内存的代码是肯定不可能的,只是你不知道它的底层是如何实现罢了。用哲学观点做为基点就能解释一切现象!