方法的参数传递(重难点):
1.形参:方法声明时小括号内的参数。
2.实参:调用方法时,实际传入的参数的值。
记住:Java中的参数传递机制是:值传递机制
1)形参是基本数据类型的:将实参的值传递给形参的基本数据类型的变量。
2)形参是引用数据类型的:将实参的引用数据类型变量的值(对应堆空间的实体的首地址的值)传递给形参的引用数据类型的变量。
实例1):形参是基本数据类型的
1 package com.cnblogs.java; 2 3 public class ZhiChuanDi { 4 public static void main(String[] args) { 5 ZhiChuanDi zcd=new ZhiChuanDi(); 6 int i=8; 7 int j=4; 8 zcd.swap(i, j);//此处是值传递,只是把i和j的值传递给了形参m和n 9 //调用swap()方法交换的只是m和n的值,i和j的值并未改变。 10 System.out.println("i="+i+" j="+j);//i和j并未改变 11 12 } 13 public void swap(int m,int n){//形参是基本数据类型 14 int temp=m; 15 m=n; 16 n=temp; 17 System.out.println("m="+m+" n="+n); 18 //m和n的值交换了 19 } 20 21 }
运行结果:
m=4 n=8
i = 8 j=4
对应的内存图:new出来的ZhiChuanDi()存在堆空间,main方法中的 i 和 j 局部变量,存储在栈空间,Swap()方法中的参数m 和 n 局部变量,存储在栈空间,调用swap()方法时,只不过是把i 的值 8 传递给了 m ,把 j 的值 4 传递给了 n ,然后交换的是 m和 n 的值,打印 i 和j 的值不会改变。
2)形参是引用数据类型的
1 package com.cnblogs.java; 2 3 public class ZhiChuanDi1 { 4 public static void main(String[] args) { 5 ZhiChuanDi1 tt=new ZhiChuanDi1(); 6 DataSwap ds=new DataSwap(); 7 tt.swap(ds); 8 System.out.println("ds.i="+ds.i+" ds.j="+ds.j); 9 } 10 public void swap(DataSwap d){ 11 int temp=d.i; 12 d.i=d.j; 13 d.j=temp; 14 } 15 } 16 class DataSwap{ 17 //设置属性i和j 18 int i=10; 19 int j=5; 20 }
运行结果:
ds.i=5 ds.j=10
在内存中的存储:在内存中开辟出一个堆空间new DataSwap(),包括属性int i=10;int j=5; 然后对象ds指向堆空间的首地址,tt调用Swap()方法,把ds的首地址的值传递给了引用数据类型的形参DataSwap d,然后d是局部变量,在栈空间的首地址也指向new DataSwap(),然后创建temp 临时变量,交换的就是d.i和d.j