输出即将通过测试通过!!!构建器在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;
}
}
}
答案 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)
finally
或者是否生成了execption。这里是link,供您从Java文档中引用。