奇怪的是最后的行为?

Har*_*der 14 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么hii从函数返回后打印go(),在finally块中值已更改为"hello"?

该计划的输出是

finally value of q is hello
hii
Run Code Online (Sandbox Code Playgroud)

use*_*421 27

那是因为您返回了q在更改qfinally块中的值之前评估的值.你回来了q,评估了它的价值; 然后你qfinally块中改变了,这不会影响加载的值; 然后使用评估值完成返回.

不要写这样棘手的代码.如果它让写作它的人感到困惑,想象一下它会导致下一个人的问题,几年后当你在其他地方的时候.