面向对象基础入门6(方法的传参机制)
如果定义方法时候声明了形参,调用方法是必须传入对应的参数。
引例:
public class Transfer {
public static void swap(int a,int b)
{
int tmp=a;
a=b;
b=tmp;
}
public static void main(String[] args) {
int a=6,b=9;
Transfer.swap(a,b);
System.out.println(a+" "+b);
}
}
/*
6 9
*/
swap
方法的本意是交换a
和b
的值,但调用后并未实现功能
因为传入方法swap
的仅仅是a
和b
的副本,并不是参数本身
所以,如果传递到参数是基本类型,方法中对参数所做的修改,完全不会影响参数本身
public class Transfer {
public static void swap(DataWrap dw) {
int tmp = dw.a;
dw.a = dw.b;
dw.b = tmp;
}
public static void main(String[] args) {
DataWrap dw = new DataWrap();
dw.a = 6;
dw.b = 9;
//传入参数是引用类型
Transfer.swap(dw);
System.out.println(dw.a + " " + dw.b);
}
}
class DataWrap {
int a;
int b;
}
此时传递的是引用类型的变量dw
于main
栈中
main
方法中创建了一个新对象在堆内存中,dw
指向了对象中的变量a
和b
swap
栈也指向了堆内存中的a
和b
,包含的并不是对象本身,而是变量的首地址
所以,如果传递的对象是引用类型,参数副本与参数本身指向的是同一个对象,
因此方法通过参数副本修改对象时,会影响参数本身所指向的对象