Java 基础(方法参数的值传递机制)

方法参数的值传递机制

方法,必须由其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值

Java 里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而实参本身不受影响。

  • 形参是基本数据类型:将实参基本数据类型变量的 "数据值" 传递给形参
  • 形参是引用数据类型: 将实参引用数据类型变量的 "地址值" 传递给形参
public class ValueTransferTest {
	public static void main(String[] args) {
		
		System.out.println("***************基本数据类型:***************");
		int m = 10;
		int n = m;
		
		System.out.println("m = " + m + ", n = " + n);
		
		n = 20;
		
		System.out.println("m = " + m + ", n = " + n);
		
		System.out.println("***************引用数据类型:***************");
		
		Order o1 = new Order();
		o1.orderID = 1001;
		
		Order o2 = o1;   //赋值后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。
		
		System.out.println("o1.orderId = " + o1.orderID + ", o2.orderId = " + o2.orderID);
		
		o2.orderID = 1002;
		
		System.out.println("o1.orderId = " + o1.orderID + ", o2.orderId = " + o2.orderID);

	}
}

class Order{
	int orderID; 
}

交换 m 和 n 的值

public class ValueTransferTest1 {
	public static void main(String[] args) {
		
		int m = 10;
		int n = 20;
		
		System.out.println("m = " + m + ", n = " + n);
		
		//交换两个变量的值的操作(正确)
//		int temp = m;
//		m = n;
//		n = temp;
		
		//交换失败
		ValueTransferTest1 test = new ValueTransferTest1();
		test.swap(m, n);
		
		
		System.out.println("m = " + m + ", n = " + n);
		
	}
	
	public void swap(int m, int n) {
		int temp = m;
		m = n;
		n = temp;
	}

}

运行结果:

public class ValueTransferTest2 {
	public static void main(String[] args) {
		
		Data data = new Data();
		
		data.m = 10;
		data.n = 20;
		
		System.out.println("m = " + data.m + ", n = " + data.n);
		
		// 交换 m 和 n 的值
		ValueTransferTest2 test = new ValueTransferTest2();
		test.swap(data);
		
		System.out.println("m = " + data.m + ", n = " + data.n);
		
	}
	
	public void swap(Data data) {
		int temp = data.m;
		data.m = data.n;
		data.n = temp;
	}

}

class Data{
	int m;
	int n;
}

运行结果:

原文地址:https://www.cnblogs.com/klvchen/p/14330372.html