在finally块中为null赋值null

-2 java stringbuilder exception finally try-catch

以下代码的输出是"Test Passed"; 谁能解释一下为什么?

public class Test {
    public static void main(String args[]) {
        System.out.println(new Test().print());
    }

    protected StringBuilder print() {
        StringBuilder builder = new StringBuilder();
        try {
            builder.append("Test ");
            return builder.append("Passed!!!");
        } finally {
        builder = null; 
    }
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 7

基本上,Java的作用如下:

StringBuilder valueToReturn = builder.append("Passed!!!");
executeFinallyBlock();
return valueToReturn;
Run Code Online (Sandbox Code Playgroud)

无论你在finally块中做什么,Java都会保留对要返回的值的引用,并返回该引用.所以它变成:

StringBuilder valueToReturn = builder.append("Passed!!!");
builder = null;
return valueToReturn;
Run Code Online (Sandbox Code Playgroud)