方法参数的值传递机制
方法,必须由其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
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;
}
运行结果: