一道让多少人掉坑里的题目

在博客园上看到一道这样的题

class Program
    {
        static int numb = 1;
        static int i = GetNumber();
        int j = GetNumber();
        static void Main(string[] args)
        {
            Console.WriteLine("i={0}", i);
            Console.WriteLine("j={0}", new Program().j);
            Console.WriteLine("num={0}", numb);

            Console.ReadKey();

        }
        static int GetNumber()
        {
            return numb++;
        }
    }

来来来,你觉得输出的结果是什么?

我再给它换成这样

class Program
    {
        static int i = GetNumber();
        static int numb = 1;
        
        int j = GetNumber();
        static void Main(string[] args)
        {
            Console.WriteLine("i={0}", i);
            Console.WriteLine("j={0}", new Program().j);
            Console.WriteLine("num={0}", numb);

            Console.ReadKey();

        }
        static int GetNumber()
        {
            return numb++;
        }
    }

你再试试猜猜它运行的结果是什么,是不是跟上面的一致,注意 我只是换了一下静态字段的一个位置

答案揭晓:

我猜测是这样的,第二个是因为static int i = GetNumber();写在最前面 这个时候numb还没有访问到 所以这个时候使用的numb为0

也不知道实际情况是不是这么个情况。。。

posted @ 2015-06-06 13:44  程序有Bug  阅读(388)  评论(0编辑  收藏  举报