Java是一門非常流行且常用的編程語言,因為在開發(fā)過程中,我們經(jīng)常要處理參數(shù)傳遞的問題,所以Java中有兩種 不同的傳遞參數(shù)的方式:值傳遞和引用傳遞。
值傳遞(Pass-by-Value)是指在調(diào)用方法時,實參將自己的數(shù)值副本傳遞給函數(shù)的形參,這樣函數(shù)內(nèi)部的操作將不會影響到原實參的值。Java中傳遞的基本數(shù)據(jù)類型都是通過值傳遞的方式進行的。下面是一個例子:
public static void main(String[] args) { int a = 10; int b = 20; swap(a, b); System.out.println("a = " + a + ", b = " + b); } public static void swap(int a, int b) { int temp; temp = a; a = b; b = temp; }
運行程序后輸出的結(jié)果是 a = 10, b = 20,可以看出swap方法中的a、 b變量只是臨時變量,在函數(shù)體內(nèi)對a、b進行的交換操作不會影響到主函數(shù)中的a、b變量。
引用傳遞(Pass-by-Reference)是指在Java方法調(diào)用過程中,實參的引用(而不是數(shù)據(jù)值)地址被傳遞給形參,從而形參上可以訪問實參的值。Java中引用數(shù)據(jù)類型是通過引用傳遞的方式進行的。下面是一個例子:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public static void main(String[] args) { Person a = new Person("Tom", 20); Person b = new Person("Jerry", 24); change(a, b); System.out.println("a: name=" + a.getName() + ", age=" + a.getAge()); System.out.println("b: name=" + b.getName() + ", age=" + b.getAge()); } public static void change(Person a, Person b) { a.setName("John"); b.setAge(30); }
運行程序后輸出的結(jié)果是 a: name=John, age=20,b: name=Jerry, age=30,可以看出change方法中的a和b參數(shù)是指向了兩個不同的Person對象,但是修改a的名字和b的年齡后,仍會影響到實際的對象。
總之,值傳遞和引用傳遞都有自己的使用場景和優(yōu)點,我們需要根據(jù)具體的情況選擇使用哪一種傳遞方式。