掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
值傳遞是對基本型變量而言的,傳遞的是該變量的一個副本,改變副本不影響原變量. 引用傳遞一般是對于對象型變量而言的,傳遞的是該對象地址的一個副本, 并不是原對象本身 。 一般認(rèn)為,java內(nèi)的基礎(chǔ)類型數(shù)據(jù)傳遞都是值傳遞. java中實例對象的傳遞是引用傳遞

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、涇縣網(wǎng)站維護、網(wǎng)站推廣。
Java總是采用按值調(diào)用。方法得到的是所有參數(shù)值的一個拷貝,特別的,方法不能修改傳遞給它的任何參數(shù)變量的內(nèi)容。
方法參數(shù)共有兩種類型:
查看一下的代碼:
public class ParamTest {
public static void main(String[] args) {
int price = 5;
doubleValue(price);
System.out.print(price);
}
public static void doubleValue(int x) {
x = 2 * x;
}
}
【輸出結(jié)果】: 5
可以看到,這個方法執(zhí)行之后,price的值并沒有變化。接下來,看一下doubleValue具體的執(zhí)行過程為:
從上面的例子我們已經(jīng)知道一個方法不能修改一個基本數(shù)據(jù)類型的參數(shù)。而對象引用作為參數(shù)就不同了。看下面的例子:
class Student {
private float score;
public Student(float score) {
this.score = score;
}
public void setScore(float score) {
this.score = score;
}
public float getScore() {
return score;
}
}
public class ParamTest {
public static void main(String[] args) {
Student stu = new Student(80);
raiseScore(stu);
System.out.print(stu.getScore());
}
public static void raiseScore(Student s) {
s.setScore(s.getScore() + 10);
}
}
【運行結(jié)果】:
90.0
可以看出,Student實例s的內(nèi)容改變了。
具體執(zhí)行過程為:
首先編寫一個交換兩個學(xué)生的方法:
public static void swap(Student x, Student y) {
Student temp = x;
x = y;
y = temp;
}
如果java對對象是采用的是引用傳遞,那個這個方法是可以的。那么x,y對象的分?jǐn)?shù)是交換的。看下面的例子:
class Student {
private float score;
public Student(float score) {
this.score = score;
}
public void setScore(float score) {
this.score = score;
}
public float getScore() {
return score;
}
}
public class ParamTest {
public static void main(String[] args) {
Student a = new Student(0);
Student b = new Student(100);
System.out.println("交換前:");
System.out.println("a的分?jǐn)?shù):" + a.getScore() + "--- b的分?jǐn)?shù):" + b.getScore());
swap(a, b);
System.out.println("交換后:");
System.out.println("a的分?jǐn)?shù):" + a.getScore() + "--- b的分?jǐn)?shù):" + b.getScore());
}
public static void swap(Student x, Student y) {
Student temp = x;
x = y;
y = temp;
}
}
【運行結(jié)果】:
交換前: a的分?jǐn)?shù):0.0— b的分?jǐn)?shù):100.0 交換后: a的分?jǐn)?shù):0.0— b的分?jǐn)?shù):100.0
可以看出,兩者并沒有實現(xiàn)交換。說明引用傳遞的說法是不正確的。接下來一步一步看看swap調(diào)用的過程:
首先,創(chuàng)建兩個對象:
然后,進入方法體,將對象a,b的拷貝分別賦值給x,y:
接著,交換x,y的值:
swap執(zhí)行完成,x,y不再使用,回到創(chuàng)建時狀態(tài)。
從這個過程中可以看出,Java對對象采用的不是引用調(diào)用,實際上,對象引用進行的是值傳遞。
總結(jié)一下java中方法參數(shù)的使用情況:

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流