一个有关 finally 的有趣问题
看看下面的代码,会返回几?
结果是 1,尽管 finally 内的代码会在方法结束前被调用,但是并没有改变输出结果,为什么会这样?看看编译器是怎么做的?
反编译代码
看来编译器还是动了一番心思的,
。所以 finally 内的代码只适合用来做些清理工作,正经事还是不要放在这了。
这个问题虽然有点无聊,但是很考验基础知识是否学扎实了。建议放在面试题里面。
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;
}
看来编译器还是动了一番心思的,
这个问题虽然有点无聊,但是很考验基础知识是否学扎实了。建议放在面试题里面。
浙公网安备 33010602011771号