# 參數傳遞
形式參數:用于接收實際數據的變量
實際參數:實際參與運算的變量
## 方法的形式參數為基本數據類型
方法的參數是基本類型:
形式參數的改變不影響實際參數。
```
public static void main(String[] args) {
// 定義變量
int a = 10;
int b = 20;
System.out.println("1.a:" + a + ",b:" + b);// a:10,b:20
change(a, b);
System.out.println("2.a:" + a + ",b:" + b);// a:10,b:20
}
public static void change(int a, int b) { // a=10,b=20
System.out.println("3.a:" + a + ",b:" + b);// a:10,b:20
a = b; // a=20;
b = a + b; // b=40;
System.out.println("4.a:" + a + ",b:" + b);// a:20,b:40
}
```
> 輸出:
> 1.a:10,b:20
> 3.a:10,b:20
> 4.a:20,b:40
> 2.a:10,b:20
程序運行結束后,a、b仍然為它們最初的值
## 方法的形式參數為引用數據類型
方法的參數是引用類型:
形式參數的改變直接影響實際參數
```
// 定義數組
int[] arr = { 1, 2, 3, 4, 5 };
// 遍歷數組
for (int x = 0; x < arr.length; x++) {
System.out.println(arr[x]);
}
System.out.println("----------------");
change(arr);
for (int x = 0; x < arr.length; x++) {
System.out.println(arr[x]);
}
}
public static void change(int[] arr) {
for (int x = 0; x < arr.length; x++) {
// 如果元素是偶數,值就變為以前的2倍
if (arr[x] % 2 == 0) {
arr[x] *= 2;
}
}
}
```
> 本質原因還是因為引用類型在堆中開辟了新空間存放內容,棧中的操作都能實際作用在它們身上。