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

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);
		
	}

}

//  值交换成功

 

  

java 参数传递  amp 关于java中参数传递_值传递

对上面值交换代码封装一下如下 :

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 , 所以打印出来 结果并没有变化。 原理如下

       

java 参数传递  amp 关于java中参数传递_java_02

 

实现值的交换代码如下:

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 ; 
	
}

原理如下:

          

java 参数传递  amp 关于java中参数传递_java_03