JAVA基礎(chǔ)--方法傳參
為啥拿這個當(dāng)話題?
在初學(xué)者階段,許多童鞋都對方法傳參比較迷茫,知其然不知其所以然。
一.先說說參數(shù)傳遞的幾個術(shù)語:
值調(diào)用(call by vale):表示方法接收的是調(diào)用者傳遞的值。
引用調(diào)用(call by reference):表示方法接收的是調(diào)用者傳遞的變量地址。
一個方法可以修改傳遞引用所對應(yīng)的變量值,而不能修改傳遞值調(diào)用所對應(yīng)的變量值;
**JAVA語言總是采用值調(diào)用。
也就是說,JAVA方法得到的是所有參數(shù)值的一個拷貝,方法不能修改傳遞給他的任何參數(shù)變量的內(nèi)容。
例如:
int age=100;
person.setAge(age);
在以上方法調(diào)用后,age 的值還是100;
下面再看一例子,假如某方法將一個變更值修改為原來的值的3倍:
public void addValue(int x){
x = 3 * x;
}
然后調(diào)用這個方法:
int percent = 10;
addValue(percnet);
無論如何調(diào)用,percent的值還是10,下面是執(zhí)行過程:
1.x被初始化為percent值的一個拷貝(也就是10);
2.x被乘以3后,值變?yōu)?0。但是percent仍然是10;
3.該方法結(jié)束后,參數(shù)變量x不再使用。
如圖一:
二.java方法傳參類型:
?
基本數(shù)據(jù)類型:(數(shù)字,布爾型)
對象引用類型:
基本數(shù)據(jù)類型傳參在上例中已經(jīng)說過了,是不能修改基本數(shù)據(jù)類型參數(shù)的值的.
那么對于對象引用類型的傳參,能否修改呢?
先來看例子:
有如下方法:
public static void tripleSalary(Employee x)
?
{
?? x.raiseSalary(200);
}
當(dāng)調(diào)用如下代碼
harry = new Employee();
tripleSalary(harry);
時,具體的執(zhí)行過程如下:
1).x被初始化為harry對象的拷貝,這里是一個對象的引用;
2).raiseSalary方法應(yīng)用于這個對象引用.即x和harry同時引用的Employee對象薪金提高了200%.
3).方法調(diào)用結(jié)束后,參數(shù)變量x不再使用.但對象變量harry繼續(xù)引用那個薪金增至3倍Employee對象.
其過程如下圖:
通過以上實例,可以看出對象參數(shù)傳遞的是對象引用的拷貝,對象引用及其他的拷貝同時引用同一個對象.
?
很多程序語言提供兩種傳遞方式:值傳遞和引用傳遞(C++和Pascal).
有些程序員認(rèn)為java語言對對象參數(shù)傳遞也是用的引用調(diào)用.實際上是理解錯誤.這種錯誤具有一定的普遍性.下面通過一反例來說明該問題:
首先,編寫一個交換兩個Employee對象的方法:
public staitc void swap(Employee x,Emplyee y)
{
??? Employee temp = x;
??? x = y;
??? y = temp;
}
如果JAVA程序語言是對對象采用引用調(diào)用,那么這個方法就應(yīng)該能夠?qū)崿F(xiàn)交換數(shù)據(jù)的效果:
??? Employee a = new Employee("Alice",...);
??? Employee b = new Employee("Bob",...);
??? swap(a,b);
但是,方法并沒有改變存儲在變量a和b中的對象引用。swap方法的參數(shù)x和y被初始化為兩個對象引用的拷貝,這個方法交換的是這兩個拷貝。
在方法結(jié)束時,參數(shù)變量x和y被丟棄了。原來的變量a和b仍然引用這個方法調(diào)用之前所引用的對象如下圖:
這個過程說明:java語言對對象采用的不是引用調(diào)用,實際上對象引用進(jìn)行的是值傳遞。
?
最后總結(jié)一下在JAVA中,方法參數(shù)的使用情況:
*一個方法不能修改一個基本數(shù)據(jù)類型的參數(shù);
*一個方法可以改變一個對象參數(shù)的狀態(tài)(屬性);
*一個方法不能實現(xiàn)讓對象參數(shù)引用一個新對象;
本文出自 “坐看云起時” 博客
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
