关于值类型和引用类型的一个小例子

关于值类型和引用类型,一般地教材都写很很模糊,都是些概念的东西。
下面举个简单的例子:
List<int[]> list = new List<int[]>();
            int[] arr = new int[1];
            for (int i = 0; i < 10; i++)
            {
                arr[0] = i;
                list.Add(arr);
            }
    
运行完后,list的结果是??
 
不清楚值类型和引用类型或说指针地址的人,可能会觉得list应该是{1,2,3,4,5,6,7,8,9}
但运行一下,你就会发现,list的值是{9,9,9,9,9,9,9,9,9}
为什么会是这样的呢?
其实很容易理解,在循环里,i是值类型,分别是从1 到9;
但关键是数组arr是引用类型,也就是说list.Add每次添加一个元素的时候,list存放的不是arr的值,而是arr的地址;
所以每次循环时,i的值不断地变,arr里的值也不断变,但arr的地址是始终不变的
所以启动运行时,你会监测一下i,arr和list的值,你就会发现,它们分别是这样子的。
i 为0 时 arr[0] 为 0, list 为 {0};
i 为1 时 arr[0] 为 1, list 为 {1,1};
i 为2 时 arr[0] 为 2, list 为 {2,2,2};
……
i 为9 时 arr[0] 为 9,list 为 {9,9,9,9,9,9,9,9,9}
甚至可以直接这样以为,list存的是arr[0], 即是{arr[0],arr[0],arr[0],arr[0],arr[0],arr[0],arr[0],arr[0],arr[0]}
说到这里,你可能还是那样,不是很明白什么是值类型什么是引用类型,但无所谓,因为开发时你不需要答这是什么,关键是你会怎么用。
但你上面的例子你能一步步去调试看值的变化的话,完完全全明白的话,你应该已经对值类型与引用类型的用法或说原理有了进一步了解了并知道怎么用了吧。
 
 

posted on 2012-10-12 14:07  云中飞杨  阅读(441)  评论(0)    收藏  举报

导航