该计划的输出会是什么?

时间:2014-04-04 15:51:24

标签: java try-catch stringbuilder finally

输出即将通过测试通过!!!构建器在finally块

中设置为null时如何返回
    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; 
        }
    }
}

4 个答案:

答案 0 :(得分:0)

因为return的结果是当时builder的引用的副本。

builder = null;代码中的{p> finally并未更改此引用,而只是替换builder方法中print变量的当前值。

但请注意,如果更改返回的对象引用的状态,则会影响返回值的结果。例如:

protected StringBuilder print() {
    StringBuilder builder = new StringBuilder();
    try {
        builder.append("Test ");
        return builder.append("Passed!!!");
    } finally {
        builder.append(" but modified!");
        //builder = null; 
    }
}

它将打印:

Test Passed!!! but modified!

答案 1 :(得分:0)

finally发生在其他一切之后。这意味着返回后构建器将设置为null(当然,在调用者获得结果之前。

请注意,在这种情况下,归零构建器没有多大意义,因为构建器变量即将超出范围,并且无论如何都将通过垃圾回收进行清理。

答案 2 :(得分:0)

基本上你返回了StringBuilder的内容,然后把它设置为null。

答案 3 :(得分:0)

在try块之后执行

finally或者是否生成了execption。这里是link,供您从Java文档中引用。