最近专门再网上收集了再trycatchfinally中return的使用、得到得答案好像都是这样的、return语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return的是引用类型的,改动将可以起效果。
也对如下代码进行了验证:
package com.wxhx.java.exception;
public class ExceptionTest2
{
public static void main(String[] args) {
System.out.println("=============test1==================");
System.out.println(test1());
System.out.println("==============================="); System.out.println("=============test1_1==================");
System.out.println(test1_1());
System.out.println("===============================");
}
public static String test1() {
String a = "in try"; try {
return a;
} catch (Exception e) { } finally {
a = "in finally";
System.out.println("do finally");
} return a;
} public static String test1_1() {
String a = "in try"; try {
return a;
} catch (Exception e) { } finally {
a = "in finally";
System.out.println("do finally");
return a;
}
}
}那我再想一段普通代码的return、如下: public String getName()
{
String name = "aaa";
return name+"bbb";
}
实现的原理还是return语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return的是引用类型的,改动将可以起效果。不知其原理、寻求高手解答、并能告诉我参考资料、谢谢。
也对如下代码进行了验证:
package com.wxhx.java.exception;
public class ExceptionTest2
{
public static void main(String[] args) {
System.out.println("=============test1==================");
System.out.println(test1());
System.out.println("==============================="); System.out.println("=============test1_1==================");
System.out.println(test1_1());
System.out.println("===============================");
}
public static String test1() {
String a = "in try"; try {
return a;
} catch (Exception e) { } finally {
a = "in finally";
System.out.println("do finally");
} return a;
} public static String test1_1() {
String a = "in try"; try {
return a;
} catch (Exception e) { } finally {
a = "in finally";
System.out.println("do finally");
return a;
}
}
}那我再想一段普通代码的return、如下: public String getName()
{
String name = "aaa";
return name+"bbb";
}
实现的原理还是return语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return的是引用类型的,改动将可以起效果。不知其原理、寻求高手解答、并能告诉我参考资料、谢谢。
{
String name = "aaa";
return name;
}
如上一段代码是不是会在栈中重新生成一个引用(即复制一份引用)、然后返回的是复制引用所指向的对象呀???