下面是个面试题,请教大家这个问题:
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[3] { 4, 3, 2 };
            int a = 3;
            aaa(array, a);
            int s = a;
        }
        public static  void aaa(int[] arr, int b)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] *= 2;
                b = arr[i] * 3;
            }
            b = 8;
        }
        public static int add(int s)
        {
            s = s + 1;
            return s;
        }
    }
}上面Main中,执行后数组array值为{8,6,4},但a的值依然是3.,我认为数组值改变了,a的值也应该改变了啊。

解决方案 »

  1.   

    数组array传递是相当于传递内存地址,所以array的值改变了
    而变量a传递的只是值,所以不改变
      

  2.   

    和静态方法无关。简单来说,是因为int是值类型,所谓值类型,就是变量直接保存值而不是引用。int[] array = new int[] { 1, 2, 3 };
    int a = array[2];
    a = 10;
    Console.WriteLine(array[2]);
    array[2] = 10;
    Console.WriteLine(array[2]);
      

  3.   

    传递到aaa函数里的a是a的一份拷贝,改变的是a的拷贝,并不是a值类型函数传递的时候都是拷贝
      

  4.   

    哎!~想不到还有比我菜的, 因为 数组 他是引用类型   int 是直类型的,而他们传递的方式 都是直类型传递方式,如果你把他们用引用类型传递他们的值就会改变哈 具体代码如下哈!using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] array = new int[3] { 4, 3, 2 };
                int a = 3;
                aaa(array,ref a);
                int s = a;
            }
            public static  void aaa(int[] arr,ref int b)
            {
                for (int i = 0; i < arr.Length; i++)
                {
                    arr[i] *= 2;
                    b = arr[i] * 3;
                }
                b = 8;
            }
            public static int add(int s)
            {
                s = s + 1;
                return s;
            }
        }
    }