有这么个题目,大家帮我看看
在下列函数结束后,马上从内存中清除的是_________.
void Test()
{
int i = 100;
int[] arr = new int[10];
string str = "this is a test";
object r = new System.DateTime(1999,9,9);
}
A. 变量i
B. 数组变量arr
C. 变量str 所引用的字符串对象
D. 变量r 所引用的DataTime 对象
正确答案:A、B

解决方案 »

  1.   

    int和int[]是值类型的,内存分配在栈上,而str和r都是对象,是引用,内存分配在堆上。不知道我说的对不,呵呵
      

  2.   

    int[]是引用类型的,别乱扯。很明显的,后面有一个new,还有就是Array并不是从ValueType继承的。
      

  3.   

    int 的变量也可以这样申请呀。如int i = new int();
      

  4.   

    int 的变量也可以这样申请呀。如int i = new int();唔不错,但数组的确是引用类型。
      

  5.   

    忘记C#里面结构也是用new来执行构造函数的了。
      

  6.   

    i是值类型,他在方法的堆栈上被创建,在方法结束的时候,i占用的空间即被释放掉。
    arr是个数组对象,是引用类型。选它的原因,我认为是虽然在堆上分配了空间,但是CLR足够的聪明,知道没有使用数组中的任何一个元素,所以arr会被释放掉
      

  7.   

    数组本身也是一个对象,但是它比较特殊,它对于数据的存取做了优化,换言之就是这样:class _Array
    {
      private int _v0;
      private int _v1;
      private int _v2;  ......  private int _v9;
    }_Array _a = new _Array();int[] a = new int[10];a的效率要比_a的效率要好。