C# 数组为引用还是值类型?若是引用类型,下边该怎样理解?

private static void change(int[] n)
{
n[2] = 1000;
}
private static void change2(int[] n)
{
n = new int[1] { 3 };
}
public static void Main(String[] args)
{
int[] n = new int[] { 1, 2, 3, 4 };
change(n);
Console.WriteLine(n[2].ToString());//1000 ==》引用类型
Console.WriteLine("**************************");
int[] n2 = new int[] { 1, 2, 3, 4, 5 };
change2(n2);
for (int j = 0; j < n2.Length; j++)
{
Console.Write(n2[j]);//1, 2, 3, 4,5 ==》如果是引用类型这里所得的值为什么不只为 3
}
Console.ReadKey();
}

第1个回答  推荐于2018-05-12
当运行change2方法时,n2的数组对应的内存地址重新分配一个新的只有一个元素的新的地址空间,但是由于n2新的地址空间的作用域仅限于chang2的方法中,当方法调用结束作用域结束,会自动释放刚刚分配的地址空间,但是n2的对象作用域是在主函数里面的,在chang2调用结束后由于主函数中的n2在内存中的原有地址一直存在,n2会重新指向原有内存地址,所以循环出的结果是12345。
如果把chang2的方法改成
private static int [] change2(int[] n) { n = new int[1] { 3 }; return n; }这样n2的结果就会变成3,写的有点罗嗦,逻辑不是很明确,但是意思表达出来了。本回答被网友采纳
相似回答