本质上还是 reference 与 primitive value 的问题 ,在 finaly 中修改了返回值 与 调用return 与否,不小心的话可能会出错的。所以,一般finally用来销毁资源就好了,别和返回值扯上。
示例:
/*
* @author yiminghe
* @date 2009.08.26
*/
public class Parent {
int i = 0;
static Parent test() {
Parent p = new Parent();
try {
return p;
} catch (Exception e) {
} finally {
// 已经返回引用到一个新值了,但是p和返回引用值指向同一个i,仍然可以修改
p.i = 2;
}
System.out.println("ok");
return p;
}
static int testInt() {
int i = 1;
try {
return i;
} catch (Exception e) {
} finally {
// 已经返回到一个新值了,局部变量和返回值没关系了,i局部变量改了没用
i = 2;
}
System.out.println("ok");
return i;
}
static int testInt2() {
int i = 1;
try {
return i;
} catch (Exception e) {
} finally {
// 只能再次返回了
i = 2;
return i;
}
//System.out.println("ok");
//return i;
}
public static void main(String[] args) {
System.out.println(test().i);
System.out.println(testInt());
System.out.println(testInt2());
}
}