java try return finally 返回结果
个人认为try中的return会保存值(基本类型保存值,引用类型保存引用),等finally代码执行结束后再返回结果
所以如果在finally中改变基本类型结果会改变,改变引用类型的内容结果也会改变,但是改变引用类型的引用(比如换个对象或者赋值null)结果不会改变
示例如下:
public static void main(String[] args) {
int anInt = getInt();
System.out.println("测试基本数据类型:"+anInt);
Map<String, String> map = getMap();
System.out.println("测试引用数据类型:"+map.get("key")+":"+System.identityHashCode(map));
}
public static int getInt(){
int i = 1;
try {
i=2;
return i;
} finally {
i=3;
}
}
public static Map<String,String> getMap(){
HashMap<String, String> map = new HashMap<>();
map.put("key","value");
System.out.println("1次:"+map.get("key")+":"+System.identityHashCode(map));
try {
map.put("key","try");
System.out.println("2次:"+map.get("key")+":"+System.identityHashCode(map));
return map;
}catch (Exception e){
map.put("key","catch");
}finally {
map.put("key","finally");
System.out.println("3次:"+map.get("key")+":"+System.identityHashCode(map));
map=new HashMap<>();
System.out.println("4次:"+System.identityHashCode(map));
map=null;
System.out.println("5次:"+System.identityHashCode(map));
}
return null;
}
输出如下:
测试基本数据类型:2
1次:value:2058534881
2次:try:2058534881
3次:finally:2058534881
4次:1232367853
5次:0
测试引用数据类型:finally:2058534881