class StaticTest
{
      static int i=47;
}
class StaticFun
{
      static void incr()
      {
             StaticTest.i++;
      }
}
public class MainClass
{
       public static void main(String[] args)
       {
           System.out.println(StaticTest.i);
       }
}
这段语句的运行结果为什么是47,而不是48呢?换成下面这段:
class StaticTest
{
      static int i=47;
}
class StaticFun
{
      static int incr()
      {
             return StaticTest.i+1;//如果这里用i++,结果i还是47。
      }
}
public class MainClass
{
       public static void main(String[] args)
       {
           System.out.println(StaticFun.incr());
       }
}i就变48了。跟上面那段原理一样啊,奇怪

解决方案 »

  1.   

    上面的代码中,你只是取了StaticTest.i的值,并没有调用StaticFun.incr()下面的代码中,你用了
    StaticFun.incr()
    返回的是StaticTest.i+1
      

  2.   

    问题解决了。
    class StaticTest
    {
          static int i=47;
    }
    class StaticFun
    {
          static void incr()
          {
                 StaticTest.i++;
          }
    }
    public class MainClass
    {
           public static void main(String[] args)
           {
                  StaticFun.incr();
                  //以前没有写上这句,所以没有调用到StaticTest.i++;
                  System.out.println(StaticTest.i);
           }
    }
    因为在编译时有编译到 StaticTest.i++; ,还以为运行时也有运行到,睡了一觉才领略出楼上朋友的话。^_^ 谢谢