这些是我正在阅读的C#书籍中的示例,我有点难以理解这个示例的实际作用,希望能够解释一下,以便更好地理解这里发生了什么。
//creates and initialzes firstArray
int[] firstArray = { 1, 2, 3 };
//Copy the reference in variable firstArray and assign it to firstarraycopy
int[] firstArrayCopy = firstArray;
Console.WriteLine("Test passing firstArray reference by value");
Console.Write("\nContents of firstArray " +
"Before calling FirstDouble:\n\t");
//display contents of firstArray with forloop using counter
for (int i = 0; i < firstArray.Length; i++)
Console.Write("{0} ", firstArray[i]);
//pass variable firstArray by value to FirstDouble
FirstDouble(firstArray);
Console.Write("\n\nContents of firstArray after " +
"calling FirstDouble\n\t");
//display contents of firstArray
for (int i = 0; i < firstArray.Length; i++)
Console.Write("{0} ", firstArray[i]);
// test whether reference was changed by FirstDouble
if (firstArray == firstArrayCopy)
Console.WriteLine(
"\n\nThe references refer to the same array");
else
Console.WriteLine(
"\n\nThe references refer to different arrays");
//method firstdouble with a parameter array
public static void FirstDouble(int[] array)
{
//double each elements value
for (int i = 0; i < array.Length; i++)
array[i] *= 2;
//create new object and assign its reference to array
array = new int[] { 11, 12, 13 };
基本上,我想知道的是,如果数组是按值传递的,那么原始调用者在方法中不会被修改(从我的理解来看)。因此,在方法FirstDouble的末尾,他们尝试将局部变量数组分配给一组新元素,但失败了,当显示原始调用者的新值为2、4、6时。
现在我的困惑是,如果按值传递,方法FirstDouble中的for循环如何修改原始调用者firstArray为2、4、6,而不是保留原始值1、2、3。
谢谢!