Java方法調用時傳遞參數問題

博主是大三的在校大學生,學習計算機的路上,有些自己的感悟,寫下來互相討論下,歡迎吐槽。

我們都知道將參數傳遞給方法時有兩種,第一種是按值調用(called by value)表示方法接收的是調用者提供的值,第二種是按引用傳遞(called by reference)表示方法接收的是調用者提供的變量的地址。方法可以修改傳遞引用所對應的變量值,而不能修改傳遞值調用的所對應的變量值。比如:

public void swap(int x,int y){
	int m=y;
	y=x;
	x=m;
}
這樣很明顯是不可以交換的,如果用c++引用可以做到,或者指針也可以做到。

java方法參數類型共有兩種類型,一是基本數據類型,二是對象引用,當對象的引用作爲參數時,對象引用來修改對象裏面的值。但是很多人存在一個誤區,認爲java可以像c++那樣有對象引用的交換的功能,但是實際上是不對的,java總是採用的是按值調用,方法得到的是所有參數值的一個拷貝,方法不能修改傳遞給它的任何參數變量的內容。例如:

class test{
       test a;
       test b;
       swap(a,b);
       public void swap(test x,test y){
		test te;
		te=x;
		x=y;
		y=te;
	}
}

如果java是對對象的採用是引用調用,那麼這個方法是可以進行對象的交換的,但是方法並沒有改變存儲在變量a和b中的引用,也就是說swap方法的參數x和y被初始化兩個對象的引用的拷貝,只是引用計數加1,方法結束時參數x和y的被丟棄,a,b還是仍然引用這個方法調用之前的所引用的對象。

因此實際上java對對象引用進行的是值傳遞。

總結下:

一個方法不能修改一個基本數據類型的參數。

一個方法可以改變一個對象參數的狀態。

一個方法不能讓對象參數引用一個新的對象。

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