一、形参与实参
(一)实参:用于方法调用时传入的值。
(一)形参:方法调用时临时穿件的实参副本,方法调用结束则废弃。
二、引用传递与按值传递
(一)引用传递:引用传递的实参变量为引用类型,即变量的值为地址;即调用的时候传递给副本形参的值为一个地址;
1、改变形参变量对应的值的会改变实参变量对应的值。
public static void main(String[] args){
List list = new ArrayList<Integer>();
list.add(0,1);
f(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
private static void f(List list) {
list.set(0,2);
}
打印结果:2
2、但是改变形参的指向不会影响实参的任何事情。
public static void main(String[] args){
List list = new ArrayList<Integer>();
list.add(0,1);
f(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
private static void f(List list) {
list=null;
}
打印结果:1
(二)按值传递:按值传递的实参变量为基本类型,即变量的值为基本类型值;
1、有关形参的任何操作均与实参无关,相当于是形参只是在创建的时候用实参的值做了一下初始化而已;
public static void main(String[] args){
int a=0;
f(a);
System.out.println(a);
}
private static void f(int a) {
a=2;
a++;
}
打印结果:0
2、String, Integer, Float, Double, Short, Byte, Long, Character等基本包装类型类,虽然原理也是引用传递,但由于其特殊性,传值效果相当于按值传递;
public static void main(String[] args){
Integer a=new Integer(0);
f(a);
System.out.println(a);
}
private static void f(Integer a) {
a=2;
a++;
}
打印结果:0
public static void main(String[] args){
Integer a=new Integer(0);
f(a);
System.out.println(a);
}
private static void f(Integer a) {
Integer b = new Integer(400);
a=a+b;
}
打印结果:仍然是0