一、針對於方法內變量的賦值舉例
/**
* Description:
*
* @author zygui
* @date Created on 2020/6/25 19:21
*/
public class VarTest {
public static void main(String[] args) {
System.out.println("***********基本數據類型:****************");
int m = 10;
int n = m;
System.out.println("m = " + m + ", n = " + n); // 很簡單, m = 10, n = 10;
n = 20;
System.out.println("m = " + m + ", n = " + n); // 很簡單, m = 10, n = 20;
}
public class VarTest2 {
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); // 1001, 1001
o2.orderId = 1002;
// 因爲指向的是同一地址空間, 當o2修改該空間中的orderId後, o1的orderId也隨之改變
System.out.println("o1.orderId = " + o1.orderId + ", o2.orderId = " +o2.orderId); // 1002, 1002
}
}
class Order {
int orderId;
}
二、針對於方法的參數概念
- 形參:方法定義時,聲明的小括號內的參數
- 實參:方法調用時,實際傳遞給形參的數據
三、Java中參數傳遞機制:值傳遞
規則:
- 如果參數是
基本數據類型
,此時實參賦給形參的是實參真實存儲的數據值
。 - 如果參數是
引用數據類型
,此時實參賦給形參的是實參存儲數據的地址值
。
推廣:
- 如果變量是基本數據類型,此時賦值的是變量所保存的數據值。
- 如果變量是引用數據類型,此時賦值的是變量所保存的數據的地址值。
傳遞基本數據類型
public class VarTest {
public static void main(String[] args) {
int m = 10;
int n = 20;
System.out.println("m = " + m + ", n = " + n);
VarTest vt = new VarTest();
vt.swap(m, n);
System.out.println("m = " + m + ", n = " + n); // 10, 20;
}
public void swap(int m, int n){
int temp = m;
m = n;
n = temp;
// System.out.println("m = " + m + ", n = " + n); // 20, 10
}
}
傳遞引用數據類型
public class VarTest {
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);
// int temp = data.m;
// data.m = data.n;
// data.n = temp;
// System.out.println("m = " + data.m + ", n = " + data.n); // 20, 10
VarTest vt = new VarTest();
vt.swap(data); // 傳的是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;
System.out.println("m = " + data.m + ", n = " + data.n); // 20, 10
}
}
class Data {
int m;
int n;
}
練習
內存圖如下