gpt4 book ai didi

java - 如果finally block 修改了从catch block 返回的值,会发生什么情况?

转载 作者:行者123 更新时间:2023-12-02 02:57:35 25 4
gpt4 key购买 nike

当变量 value是一个原语,finally block 对变量的修改没有效果。然而当 value是一个引用,finally block 对变量的修改才生效。您能帮忙解释一下为什么会发生这种情况吗?

StringBuilder value = new StringBuilder("abc");

StringBuilder get() {

try {
throw new IndexOutOfBoundsException();
} catch (IndexOutOfBoundsException e) {
return value;
} finally {
value = value.append("def");
}
}
<小时/>
 int value = 10;

int get() {

try {
throw new IndexOutOfBoundsException();
} catch (IndexOutOfBoundsException e) {
return value;
} finally {
value = value + 10;
}
}

最佳答案

由于您从 try it self 返回,finally block 将被执行,并且将被丢弃,并且不会影响最初返回的值。

同样,只有返回值没有任何效果,并且在那里执行的代码块的行为将与任何其他 java block 一样,您可以采用对象而不是原语并检查行为。

请注意 finally不仅仅对于异常处理很有用——它允许程序员避免清理代码被返回、继续或中断意外绕过。将清理代码放在finally block 中始终是一个很好的做法,即使在预计不会出现异常的情况下也是如此。

关于java - 如果finally block 修改了从catch block 返回的值,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42852303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com