是不是每string声明一个变量,就会在内存中给它划分一个小空间?那样是不是耗资源?在一些可声明可不声明的地方,一般应该怎么做比较好?譬如方法GetStr()是返回一个字符串或者别的类型变量,然后我在另一个方法AA()中要引用这个返回变量,方法BB(string a)是在AA()中执行的函数,
方法一:
    protected void AA()
    {
         string theStr = GetStr();
         BB(theStr);
    }方法二:
     protected void AA()
    {
         BB(GetStr());
    } ============
如果从整体看也许这两个没有区别,但是如果从细小的性能上,这两种方法那种效率更好一些啊?
谢谢

解决方案 »

  1.   

    声明之后,初始化之前,它的值是null
      

  2.   

    两种差别不大
    差异在于方法1多声明了一个变量,而这个变量的作用域与生存期在整个AA
    而第二个方法中的变量只在BB中有效,
    如果AA中不再用这个变量,当然第二个方法好,至少代码少~
      

  3.   

    先谢谢viena,再问两个问题:
    一.请问在 1. string aa;  跟2. string aa = string.Empty; 或者 3.string aa = "";
        这三种有区别吗,这三个是不是都不会分配内存?二.如楼上所说,在声明一个变量:string aa; 此时并没有分配内存,那当aa=GetStr(); 此时是不是会分配给aa一定的内存,来存放GetStr()返回的值? 如果是占用一定内存,那么当局部变量aa在出了方法AA()后,是不是内存自动收回?谢谢
      

  4.   

    一.
    1. string aa; //不分配内存,此时尚未初始化
    2. string aa = string.Empty; //分配内存,赋值string.Empty
    3. string aa = ""; //分配内存,赋值"",注意空字符串""和空值string.Empty是不同的二.
    1. 是
    2. 是
      

  5.   

    1. string aa; 这样aa是指向一个固定空间,里面是null.
       string aa = string.Empty 和 string aa = "" 他们是一样的。指向一个长度为0的字符串对象。第一个不会分配内存,而后两个会。但是.net对字符串对象有特殊处理,有个类似拘留池的东东。2. 当 aa = GetStr(); 此时根据 GetStr() 的返回值来分配内存~ 会自动回收,但不是立即回收,这个是由.net的GC决定的。以上,内存的分配和回收都是.net托管的。
      

  6.   

    vrhero(这个家伙很懒...)  说的不对哦。string.Empty 和 "" 是一样的说:String.Empty 表示空字符串。此字段为只读字段。此字段的值为零长度字符串 ""。
      

  7.   

    -_-!不好意思记错了,string.Empty的值为零长度字符串"",确实是一样的,呵呵
      

  8.   

    两位说的不错,另强调一点
    当局部变量aa在出了方法AA()后,只是变量不再有效而已,
    已符合内存自动收回的条件,但并不会立即执行
    具体什么时候回收系统自动判断处理,是不可预知的
      

  9.   

    哦,fangxinggood(JustACoder) 已经说了,刚才没仔细看~