找到这个问题 here
我不明白,为什么在第一种情况下打印 CoolReturn+1
而在第二种情况下打印 CoolReturn
?它是如何工作的?
谢谢
====================
将打印什么?
public void testFinally(){
System.out.println(setOne().toString());
}
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder.append("+1");
}
}
答案:CoolReturn+1
有点难:
public void testFinally(){
System.out.println(setOne().toString());
}
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder=null; /* ;) */
}
}
答案:CoolReturn
最佳答案
考虑
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder.append("+1");
}
}
作为
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
StringBuilder ret = builder.append("Return"); // 1
return ret; // 2
}finally{
builder.append("+1"); //3
}
}
第 1 行被执行,builder
作为结果返回。然后执行第 3 行,builder
被 +1
追加,然后返回 ret
,这是对对象的“引用”由 builder
引用。第二种情况也是如此。希望清楚。
关于java - 尝试/最终阻止问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5477410/