java - 最后的行为很奇怪吗?

标签 java finally

public class Test2 {

    public static void main(String[] args) {
        Test2 obj=new Test2();
        String a=obj.go();

        System.out.print(a);
    }


    public String go() {
        String q="hii";
        try {
            return q;
        }
        finally {
            q="hello";
            System.out.println("finally value of q is "+q);
        }
    }

为什么这个打印是hii从函数go()返回后,finally block 中的值已更改为“hello”?

程序的输出是

finally value of q is hello
hii

最佳答案

这是因为您在finally block 中更改q 的值之前返回了从q 求值的值。您返回了 q,它评估了它的值;然后你改变了finally block 中的q,这并没有影响加载的值;然后使用评估值完成返回。

不要编写这样棘手的代码。如果它让写它的人感到困惑,想象一下它会给下一个人带来什么问题,几年后当你在其他地方时。

关于java - 最后的行为很奇怪吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30265772/

相关文章:

可预先保留的 Java JVM 最大堆大小

java - 没有指数格式的大十进制 --> 数据库中的 0.0000 被转换为 .txt 文件中的 0E-4

java - Spring Security 配置 - HttpSecurity 与 WebSecurity

c++ - 正确替换 C++ 中缺失的 'finally'

java - 我们可以在 finally block 中使用 "return"

java - finally 和 no finally 和有什么不一样?

java - 多次返回 : Which one sets the final return value?

java - 尝试内和尝试后返回位置时的不同行为

java - 如何使用 printf 分隔多个小数并将所有这些数字四舍五入到小数点后两位

java - 返回 new[] 时出现 NullPointerException