在 Java 中,傳值和傳引用都是很常見的概念。但是它們之間有什么區(qū)別呢?
首先,傳值是指程序在把一個參數(shù)傳遞給函數(shù)的時候,實際傳遞的是參數(shù)的副本。這意味著即使在函數(shù)內(nèi)部改變這個參數(shù)的值,函數(shù)外部的實際參數(shù)也不會改變。例如:
public static void main(String[] args) { int a = 5; add(a); System.out.println(a); // 輸出為 5 } public static void add(int b) { b += 3; }
在上面的這個例子中,盡管在函數(shù) add() 內(nèi)部修改了參數(shù) b 的值,但是函數(shù)外部的實際參數(shù) a 并沒有受到影響。
與之相對的是傳引用,這種方式是指在把參數(shù)傳遞給函數(shù)時,實際上傳遞的是參數(shù)的引用。這意味著如果在函數(shù)內(nèi)部修改了這個引用指向的對象的屬性,函數(shù)外部的這個對象也會被改變。例如:
public static void main(String[] args) { Student s = new Student("Lucy"); changeName(s); System.out.println(s.getName()); // 輸出為 "Tom" } public static void changeName(Student student) { student.setName("Tom"); } class Student { private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
在上面的這個例子中,函數(shù) changeName() 接收的參數(shù)是一個學(xué)生對象的引用。在函數(shù)內(nèi)部修改了這個對象的名字,導(dǎo)致函數(shù)外部的這個學(xué)生對象也被改變了。
通過上述兩個例子我們可以看出,在 Java 中傳值和傳引用是有所不同的。程序員根據(jù)具體的需要選擇合適的參數(shù)傳遞方式。