日期:2014-05-20  浏览次数:20800 次

关于变量的实例域问题
public   class   Test  
{
      int   x;
      public   static   void   main   (String[]   args)
      {
          int   x=1;
          System.out.println(x);
          Test   test=new   Test();
          System.out.println(test.x);
          test.assign1();          

                //assign1使用完应该有使x为2,为什么x会变0,它要清除堆栈也要运行x=2

          System.out.println(test.x);
          test.assign2();
          System.out.println(test.x);
          System.out.println(x);
         
      }
      public   void   assign1()
      {
          int   x=2;
      }
      public   void   assign2()
      {
          x=3;
      }
}

运行结果:     1
                        0
                        0
                        3
                        1

1.   第三个为什么是0,assign1()方法使用完应该有使x为2,为什么x会变0,它要清除堆栈也要运行x=2


2.     一开始的   int   x   到底有没有分配空间,是不是只要是变量都会分配一块固定的空间,还是   需要   产生一个对象才能分配一块空间?


------解决方案--------------------
结果正常

问题是是 你把 局部变量 x 与成员变量弄混了

public void assign1()
{
x=2; //这样才是对成员x赋值
}

x 肯定肯定分配空间了

不然 你为什么会打印出0呢 默认就是0

局部变量与成员变量不要重名 很难调试呢
------解决方案--------------------
1、这个assign1()只是产生了一个零时变量x,没有对成员变量产生影响
2、分配了,但是因为这个是简单类型,如果是Integer x的话应该只是创建了一个引用