方法的参数传递

方法的参数传递(重难点):

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

方法的参数传递