前言
局部变量在函数间的传递
1,参数为基本类型,传递前是什么值,不管局部函数内部如果运算,函数出栈,还是原值。
2,参数为实例类型,传递前已经初始化【!=null】,在局部函数内部修改该实例对象的变量,函数出栈,实例对象保持改变。
3,参数为实例类型,传递前未初始化【==null】,在局部函数内部初始化,并修改实力对象的变量,函数出栈,实例对象为null。
public class TestParam2 {
public static void main(String[] args) {
a();
}
public static void a() {
List list = new ArrayList<String>();
list.add("test");
List list1 = null;
String str = "a()";
System.out.println("1," + str);//1,a()
System.out.println("2," + list);//2,[test]
System.out.println("3," + list1);//3,null
aaa(str,list,list1);
System.out.println("7," + str);//7,a() 【如果是基本类型,经过局部函数后,会恢复原值】
System.out.println("8," + list);//8,[test, test2] 【如果是对象类型,且不为null,经过局部函数后,会改变对象】
System.out.println("9," + list1);//9,null 【如果是对象类型,且为null,在局部函数创建该实力,并赋值,退出局部函数,恢复为null】
}
public static void aaa(String str,List list,List list1) {
str = "aaa()";
list.add("test2");
list1 = new ArrayList<>();
list1.add("list1");
System.out.println("4," + str);//4,aaa()
System.out.println("5," + list);//5,[test, test2]
System.out.println("6," + list1);//6,[list1]
}
}