是不是每string声明一个变量,就会在内存中给它划分一个小空间?那样是不是耗资源?在一些可声明可不声明的地方,一般应该怎么做比较好?譬如方法GetStr()是返回一个字符串或者别的类型变量,然后我在另一个方法AA()中要引用这个返回变量,方法BB(string a)是在AA()中执行的函数,
方法一:
protected void AA()
{
string theStr = GetStr();
BB(theStr);
}方法二:
protected void AA()
{
BB(GetStr());
} ============
如果从整体看也许这两个没有区别,但是如果从细小的性能上,这两种方法那种效率更好一些啊?
谢谢
方法一:
protected void AA()
{
string theStr = GetStr();
BB(theStr);
}方法二:
protected void AA()
{
BB(GetStr());
} ============
如果从整体看也许这两个没有区别,但是如果从细小的性能上,这两种方法那种效率更好一些啊?
谢谢
差异在于方法1多声明了一个变量,而这个变量的作用域与生存期在整个AA
而第二个方法中的变量只在BB中有效,
如果AA中不再用这个变量,当然第二个方法好,至少代码少~
一.请问在 1. string aa; 跟2. string aa = string.Empty; 或者 3.string aa = "";
这三种有区别吗,这三个是不是都不会分配内存?二.如楼上所说,在声明一个变量:string aa; 此时并没有分配内存,那当aa=GetStr(); 此时是不是会分配给aa一定的内存,来存放GetStr()返回的值? 如果是占用一定内存,那么当局部变量aa在出了方法AA()后,是不是内存自动收回?谢谢
1. string aa; //不分配内存,此时尚未初始化
2. string aa = string.Empty; //分配内存,赋值string.Empty
3. string aa = ""; //分配内存,赋值"",注意空字符串""和空值string.Empty是不同的二.
1. 是
2. 是
string aa = string.Empty 和 string aa = "" 他们是一样的。指向一个长度为0的字符串对象。第一个不会分配内存,而后两个会。但是.net对字符串对象有特殊处理,有个类似拘留池的东东。2. 当 aa = GetStr(); 此时根据 GetStr() 的返回值来分配内存~ 会自动回收,但不是立即回收,这个是由.net的GC决定的。以上,内存的分配和回收都是.net托管的。
当局部变量aa在出了方法AA()后,只是变量不再有效而已,
已符合内存自动收回的条件,但并不会立即执行
具体什么时候回收系统自动判断处理,是不可预知的