方法的参数传递(重点、难点)
1、形参 : 方法声明时,方法小括号内的参数 ;
实参 : 调用方法时,实际传入的参数的值 ;
2、 规则: java 中参数传递机制: 值传递机制 ;
1)、形参是基本数据类型的:将实参的值传递给形参的基本数据类型变量 ;
2)、形参是应用数据类型的:将实参的引用类型变量的值(对应的堆空间的对象实体类的首地址值)传递给形参的引用类型变量 ;
public class TestArgsTransfer {
public static void main(String[] args) {
TestArgsTransfer tt = new TestArgsTransfer() ;
int i = 10 ;
int j = 5 ;
System.out.println("i:"+i +"j:"+j);
// 交换变量i和j 的值 ;
int tem = i ;
i = j ;
j = tem ;
tt.swap(i, j) ;
System.out.println("i:"+i +"j:"+j);
}
}
// 值交换成功
对上面值交换代码封装一下如下 :
public class TestArgsTransfer {
public static void main(String[] args) {
TestArgsTransfer tt = new TestArgsTransfer() ;
int i = 10 ;
int j = 5 ;
System.out.println("i:"+i +"j:"+j);
// 对应图1 :
// 交换变量i和j 的值 ;
// int tem = i ;
// i = j ;
// j = tem ;
tt.swap(i, j) ;
System.out.println("i:"+i +"j:"+j);
}
// 此方法交换值失败 ;
public void swap(int i ,int j){
int tem = i ;
i = j;
j = tem ;
}
}
运行后发现值并没有交换成功。实际是调用方法时,在栈中创建了两个新的参数名为 i 和 j 的变量,整个方法内的数据交换操作的是新的 i 和 j , 所以打印出来 结果并没有变化。 原理如下
实现值的交换代码如下:
public class TestArgsTransfer1 {
public static void main(String[] args) {
TestArgsTransfer1 tt = new TestArgsTransfer1() ;
DataSwap ds = new DataSwap() ;
System.out.println("ds.i:"+ds.i+"ds.j:"+ds.j);
tt.swap(ds) ;
System.out.println("ds.i:"+ds.i+"ds.j:"+ds.j);
}
// 交换元素的值;
public void swap(DataSwap d){
int tem = d.i ;
d.i = d.j ;
d.j = tem ;
}
}
class DataSwap{
int i = 10 ;
int j = 5 ;
}
原理如下: