java中的傳值與傳引用

 java中的傳值和傳引用的說法其實只是仿照了C/C++的說法,事實上,java中傳的都是值,如下例:

public class Test {

public static void main(String[] args) { 

Test t = new Test();

A a1 = new A(3); 

change(a1); 

System.out.println(a1.getId()); 

int a= 45;

change(a);

System.out.println(a);

}

static class A {

int id;

public A(int id) {

this.id = id;

}

public void setId(int id) {

this.id = id;

}

public int getId() {

return this.id;

}

}

public static void change(A a){

a = new A(5);

System.out.println("a: " + a); 

}

public static void change(int a){

a = 5;

}

}

此程序的輸出結果是:3和45;

很顯然,第一次調用的change(a1)時,傳入的並非是a1本身,而只是a1所指向的地址的值,而在函數裏面的a = new A(5);並沒有改變a1本身所指向的地址值,所以,最後還是輸出了3;第二次調用chenge(a)時,就更容易理解了,此時傳入的就是5這個值,並不是a本身,從而a的值最終都沒有變化,當然輸出45。

由上可以很簡單的認爲,java中沒有所謂的傳引用一說,說到底都是傳值,區別在於:

1、當傳入的是對象時,所謂的“值”變成了該對象在堆上的“地址值”,如傳入對象a1,則此值是:a1的地址值;

2、當傳入的是原生變量如:int,long等變量時,則所謂的“值”是該變量的“內容”,如:a=5,就是傳入的5。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章