當(dāng)在 Java 中傳遞參數(shù)時(shí),有一些常見(jiàn)的誤解是 Java 是傳遞引用或者 Java 是傳遞值,但實(shí)際情況比較復(fù)雜。在 Java 中傳遞參數(shù),有兩種情況:傳遞基本類型和傳遞對(duì)象。
傳遞基本類型時(shí),Java 傳遞的是基本類型的值,而不是引用。這意味著,如果你在一個(gè)方法中改變了這個(gè)參數(shù)的值,它不會(huì)對(duì)調(diào)用這個(gè)方法的地方產(chǎn)生影響。這是因?yàn)?Java 把這個(gè)值復(fù)制一份,然后傳遞這份副本到方法中,而不是傳遞原值本身。例如:
public class Main {
public static void main(String[] args) {
int num = 10;
updateNum(num);
System.out.println(num); // 輸出結(jié)果為 10
}
public static void updateNum(int num) {
num = 20;
}
}
傳遞對(duì)象時(shí),Java 傳遞的是對(duì)象的引用,而不是對(duì)象本身。這意味著,如果你在一個(gè)方法中改變了這個(gè)對(duì)象的屬性,它會(huì)對(duì)調(diào)用這個(gè)方法的地方產(chǎn)生影響。這是因?yàn)?Java 把對(duì)象的引用復(fù)制一份,然后傳遞這份副本到方法中,這兩份引用指向同一個(gè)對(duì)象。例如:
public class Main {
public static void main(String[] args) {
Student s = new Student("Tom");
updateName(s);
System.out.println(s.getName()); // 輸出結(jié)果為 "Jerry"
}
public static void updateName(Student student) {
student.setName("Jerry");
}
}
class Student {
private String name;
public Student(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
因此,當(dāng)在 Java 中傳遞參數(shù)時(shí),可以根據(jù)傳遞的類型來(lái)確定是傳遞的值還是引用。但需要注意的是,雖然 Java 中傳遞對(duì)象是傳遞的引用,但 Java 中并沒(méi)有顯式的引用類型,因此可以認(rèn)為 Java 中傳遞的都是值。