一道让多少人掉坑里的题目
在博客园上看到一道这样的题
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
也不知道实际情况是不是这么个情况。。。