當參數是基本數據型別時,會直接將值賦值給參數,而當值為引用數據型別時,賦值的為位址值,所以在使用時要注意。
基本數據型別程式碼:
public class NumberTest {
public static void main(String[] args) {
PersonTest person = new PersonTest();
int num = 120;
addNum(num); // num = 121
System.out.println(num); // 120
}
public void addNum(int num) {
num++
System.out.println("num = " + num)
}
public void addAge(Person person) {
person.age++;
}
}
class Person {
String name;
int age;
}
流程:
addNum
方法,參數是int
型別的num
。addNum
內使用num++
將參數
的num
+1。實例化
NumberTest
class
。(PersonTest person = new PersonTest();
)main
中宣告int
型別的num
為120
。NumberTest
中的方法addNum
並將num
作為參數傳遞近去。參數
的num
,這時候在main
中的num
已經跟addNum
中的num
無關。addNum
時會印出121
,這是在addNum
中的System.out.println
方法。System.out.println(num);
印出的120
則是在main
中的num,並沒有被做任何改動。💡main方法中會有一個num的變數宣告
addNum中也有一個num的變數宣吿(由參數處提供),且在調用時,由於是基本數據型別,所以是直接賦值
,而不是位址值
。
引用數據型別程式碼:
public class PersonTest {
public static void main(String[] args) {
PersonTest test = new PersonTest();
Person person = new Person();
person.age = 20;
test.addAge(person);
System.out.println(person.age); // 21
}
public void addAge(Person person) {
person.age++;
}
}
class Person {
String name;
int age;
}
流程:
Person class
,當中有String
型別的name
以及int
型別的age
。main
中實例化
PersonTest
為test
。main
中實例化
Person
為 person
,並且賦值
給age
為20
。test
中的addAge
方法,並將person
帶入參數
中。person.age
後,會發現跟第一個範例不同,person.age
被改變成21了。addAge(person) → person:位址值 → 找出位址值並將age++。
main方法中 → person:位址值 → 由於是相同位址值,所以印出來時,也是被addAge操作後的值。
💡 方法中的參數對應的會是該參數所對應的值。
指的是在方法中自己調用自己,或者是A方法
調用B方法
,B方法
調用C方法
,C方法
調用A方法
,也屬於遞迴的一種。
調用自己長這樣:
public void a() {
a();
}
被別人調用再調用自己長這樣:
public void a() {
b();
}
public void b() {
c();
}
public void c() {
a();
}
💡 雖然遞迴不用設定循環終止的條件,但是要在當中朝著目標前進。
public int sum(int num1, int num2) {
if(num2 == num1) {
return num1;
}
return num2 + sum(num1, num2-1);
}
假設num1 = 1 , num2 =10
第十次呼叫時,返回 1
第九次呼叫時,返回 2+ sum(1, 1) (1)
第八次呼叫時,返回3 + sum(1, 2) (3)
第七次呼叫時,返回 4+ sum(1, 3) (6)
第六次呼叫時,返回 5+ sum(1, 4) (10)
第五次呼叫時,返回 6+ sum(1, 5) (15)
第四次呼叫時,返回7 + sum(1, 6) (21)
第三次呼叫時,返回8 + sum(1, 7) (28)
第二次呼叫時,返回9 + sum(1, 8) (36)
第一次呼叫時,返回 10 + sum(1, 9) (45)
最後返回55