一个有关 finally 的有趣问题

看看下面的代码,会返回几?
static int Test()
{
   int x = 1;
   try
   {
     return x;
   }
   finally
   {
     x = 2;
   }
}

结果是 1,尽管 finally 内的代码会在方法结束前被调用,但是并没有改变输出结果,为什么会这样?看看编译器是怎么做的?

反编译代码
private static int Test()
{
   int num2;
   int num1 = 1;
   try
   {
     num2 = num1;
   }
   finally
   {
     num1 = 2;
   }
   return num2;
}

看来编译器还是动了一番心思的, [smile] 。所以 finally 内的代码只适合用来做些清理工作,正经事还是不要放在这了。
这个问题虽然有点无聊,但是很考验基础知识是否学扎实了。建议放在面试题里面。
posted @ 2008-01-21 23:12  小罗  阅读(142)  评论(0)    收藏  举报