面向对象基础入门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,包含的并不是对象本身,而是变量的首地址

所以,如果传递的对象是引用类型,参数副本与参数本身指向的是同一个对象,
因此方法通过参数副本修改对象时,会影响参数本身所指向的对象
