當(dāng)在 Java 中傳遞參數(shù)時汁掠,有一些常見的誤解是 Java 是傳遞引用或者 Java 是傳遞值齿椅,但實際情況比較復(fù)雜囤耳。在 Java 中傳遞參數(shù)捏顺,有兩種情況:傳遞基本類型和傳遞對象裂明。
傳遞基本類型時椿浓,Java 傳遞的是基本類型的值,而不是引用闽晦。這意味著扳碍,如果你在一個方法中改變了這個參數(shù)的值,它不會對調(diào)用這個方法的地方產(chǎn)生影響仙蛉。這是因為 Java 把這個值復(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;
}
}
傳遞對象時夯巷,Java 傳遞的是對象的引用,而不是對象本身哀墓。這意味著鞭莽,如果你在一個方法中改變了這個對象的屬性,它會對調(diào)用這個方法的地方產(chǎn)生影響麸祷。這是因為 Java 把對象的引用復(fù)制一份澎怒,然后傳遞這份副本到方法中,這兩份引用指向同一個對象。例如:
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ù)時星瘾,可以根據(jù)傳遞的類型來確定是傳遞的值還是引用。但需要注意的是惧辈,雖然 Java 中傳遞對象是傳遞的引用琳状,但 Java 中并沒有顯式的引用類型,因此可以認(rèn)為 Java 中傳遞的都是值盒齿。