class test
{
    static void Main()
    {        A a = new A();
        a.addi();
        A b = new A();
        b.addi();
        Console.WriteLine(A.i);    }    class A
    {
        public static int i = 0;
        public void addi()
        {
            i = i + 1;
        }
    }}
这个输出应该是2,静态变量在实例中共享,被加了两次,我可以理解,但是为什么修改之后:
class test
{
    static void Main()
    {        A a = new A();
        a.addi();
        A b = new A();
        b.addi();
        Console.WriteLine(a.i);
        Console.WriteLine (b.i);
    }    class A
    {
        public int i = 0;
        public void addi()
        {
            i = i + 1;
        }
    }}
输出都是1呢?应该是每个实例都有自己的变量了,我的理解应该是a.i是1而b.i是2或者a.i是0而b.i是1,但是运行结果都是1,为什么呢?

解决方案 »

  1.   

     public int i = 0; 每个实例对应自己的i
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  2.   

    你既然已经知道“应该是每个实例都有自己的变量了”,为什么还“我的理解应该是a.i是1而b.i是2或者a.i是0而b.i是1,”呢?
      

  3.   

    我靠,有看到菜鸟了,static 变量不为实例拥有 public static int i = 0; A.i 是一个内存区域,public int i = 0;  A a = new A(); 
    分配内存空间 ,里面有i     ----------1A b = new A(); 
    分配另一个空间,里面有i    ----------21,2空间都叫i 而已,不过内容不同
      

  4.   

    顿悟,之前以为a.i会改变原始i的值,所以才会不理解,其实也就是a和b实例中都是i=0的副本