static int Test()
{
int x = 1;
try
{
return x;
}
finally
{
x = 2;
}
}
{
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;
}
{
int num2;
int num1 = 1;
try
{
num2 = num1;
}
finally
{
num1 = 2;
}
return num2;
}
看来编译器还是动了一番心思的,
这个问题虽然有点无聊,但是很考验基础知识是否学扎实了。建议放在面试题里面。