gpt4 book ai didi

java - 为什么 StringBuilder 不打印?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:05 24 4
gpt4 key购买 nike

为什么StringBuilder在一小段代码中不打印它应该打印的内容

public final class Test1 {

public void test() {
System.out.println(setFin().toString());
}

protected StringBuilder setFin() {
StringBuilder builder = new StringBuilder();
try {
builder.append("John");
return builder.append("Ibrahim");
} finally {
System.out.println("In finaly"); // builder.append("-DarElBeida");
builder = null;
}
}

public static void main(String args[]){
new Test1().test();
}
}

setFin() 中执行的最后一条语句中(在 finally block 中)我已将 null 分配给 builder,但我的代码打印 "In finally",然后打印 "JohnIbrahim"。谁能给我解释一下这是怎么回事?

最佳答案

try block 中有 return 语句时,它将在真正返回之前执行 finally block 。

并且该方法不会返回 null,因为 return 语句持有对实际 StringBuilder 对象的引用,而不是变量 生成器

设置 builder == null 不会删除 StringBuilder 本身,它只会删除 builder 对它的引用。

这种行为可能会造成混淆。为了清楚起见,从 try/catch/finally block 之外返回可能会有所帮助:

StringBuilder builder = new StringBuilder();

try {
builder.append("John");
builder.append("Ibrahim");
} finally {
System.out.println("In finaly"); // builder.append("-DarElBeida");
builder = null;
}

return builder;

关于java - 为什么 StringBuilder 不打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com