日期:2014-05-18  浏览次数:21424 次

帮我理解一下静态变量和实例变量
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,为什么呢?

------解决方案--------------------
public int i = 0; 

每个实例对应自己的i
  
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 

http://feiyun0112.cnblogs.com/
------解决方案--------------------
你既然已经知道“应该是每个实例都有自己的变量了”,为什么还“我的理解应该是a.i是1而b.i是2或者a.i是0而b.i是1,”呢?
------解决方案--------------------
我靠,有看到菜鸟了,static 变量不为实例拥有 

public static int i = 0; 

A.i 是一个内存区域,

public int i = 0; 

 A a = new A(); 
分配内存空间 ,里面有i ----------1

A b = new A(); 
分配另一个空间,里面有i ----------2

1,2空间都叫i 而已,不过内容不同