(重点)3.方法参数的值传递机制
一、方法,必须由其所在类或对象调用才有意义。若方法含以后参数:
1.形参:方法声明时的参数。
2.实参:方法调用时实际传给形参的参数值
二、Java的实参值如何传入方法中的?
Java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
1.形参是基本数据类型,将实参基本数据类型变量的“数据值”传递给形参。
2.形参是引用数据类型:将实参引用数据类型变量“地址值”传递给形参。
代码:
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 = 10, n = 10
m = 10, n = 20
***********引用数据类型***************
o1.orderId = 1001, o2.orderId = 1001
o1.orderId = 1002, o2.orderId = 1002
三、方法的形参的传递机制:值传递
1形参:方法定义时,声明定义时小括号内的参数。
2.实参:方法调用时,实际传递给形参的数据。
3.值传递机制
(1)基本数据类型形参演示代码:
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;
}
}
输出:
m = 10, n = 20
m = 10, n = 20
(2)引用数据类型演示代码:
public class ValueTransferTest2 {
public static void main(String[] args) {
Date date = new Date();
date.m = 10;
date.n = 20;
System.out.println("m = " + date.m + ", n = " + date.n);
//交换m和n的值的操作
// int temp = date.m;
// date.m = date.n;
// date.n = temp;
ValueTransferTest2 test = new ValueTransferTest2();
test.swap(date);
System.out.println("m = " + date.m + ", n = " + date.n);
}
public void swap(Date date) {//这里的date是一个地址,所以通过方法更改的是数据值
int temp = date.m;
date.m = date.n;
date.n = temp;
}
}
class Date{
int m;
int n;
}
输出:
m = 10, n = 20
m = 20, n = 10