java語言總是使用傳值調用的.方法得到的只是所有參數值的一個拷貝.所以方法不能改變參數變量本身的內容. 下面看一段代碼:
int i = 10;
sword.change(i);
不管change()方法是怎麼實現的,方法調用後,變量i的值依然是10.現在讓我們仔細研究一下這種情況.假設我們現在要用一個方法把變量x的值增加三倍.:
然後我們調用此方法:
double perent = 10;
zhangsan.addValue(perent);
但是,我們發現方法調用後,perent的值依然是10,並沒有達到翻一翻的目的.讓我們來看一下這段程序的執行過程:
1、x被初始化爲perent值的一個拷貝
2、x值*3,變爲30,但是perent的值依然是10.
3、方法結束後,x
下面用一個圖表來表示:
java裏的方法參數共有2種:
1、基本類型 2、對象引用
前面已經看到,方法不能改變基本類型的參數,但,對於對象參數,情況則不同.
現在,我們實現一個方法,把員工的工資增加到3倍
x.raiseSalary(200); //將x的值提高200%
}
執行調用
harry = new Employee();
tripeSalary(harry);
具體執行過程如下圖:
可以看到,x是harry的值的一份拷貝,這樣x和harry都指向同一個對象,所以x調用raisesaraly(200)方法,x和harry都指向的那個對象的薪金就被提高了200%.方法結束後,x不再被使用,但是harry繼續指向薪金被增加3倍的那個對象.
由此可見,方法得到的是對象引用的一個拷貝,2者都指向同一個對象.