日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
探究java關(guān)于值傳遞還是引用傳遞的問(wèn)題

值傳遞是對(duì)基本型變量而言的,傳遞的是該變量的一個(gè)副本,改變副本不影響原變量. 引用傳遞一般是對(duì)于對(duì)象型變量而言的,傳遞的是該對(duì)象地址的一個(gè)副本, 并不是原對(duì)象本身 。 一般認(rèn)為,java內(nèi)的基礎(chǔ)類型數(shù)據(jù)傳遞都是值傳遞. java中實(shí)例對(duì)象的傳遞是引用傳遞

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、涇縣網(wǎng)站維護(hù)、網(wǎng)站推廣。

Java總是采用按值調(diào)用。方法得到的是所有參數(shù)值的一個(gè)拷貝,特別的,方法不能修改傳遞給它的任何參數(shù)變量的內(nèi)容。

方法參數(shù)共有兩種類型:

  • 基本數(shù)據(jù)類型
  • 對(duì)象引用

1. 基本數(shù)據(jù)類型為參數(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

可以看到,這個(gè)方法執(zhí)行之后,price的值并沒(méi)有變化。接下來(lái),看一下doubleValue具體的執(zhí)行過(guò)程為:

  1. x被初始化為price值的一個(gè)拷貝,即5
  2. x乘以2后等于10。但是price沒(méi)有變化,依然是5
  3. doubleValue執(zhí)行完后,參數(shù)變量不再使用

2. 對(duì)象引用為參數(shù)

從上面的例子我們已經(jīng)知道一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類型的參數(shù)。而對(duì)象引用作為參數(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);
   }
}

【運(yùn)行結(jié)果】:

90.0

可以看出,Student實(shí)例s的內(nèi)容改變了。

具體執(zhí)行過(guò)程為:

  1. s被賦予stu值的拷貝,這里是一個(gè)對(duì)象的引用
  2. raiseScore方法應(yīng)用于這個(gè)應(yīng)用。s和stu指向同一對(duì)象,該對(duì)象的分?jǐn)?shù)增加了10
  3. raiseScore方法結(jié)束后,s不再使用,stu指向的那個(gè)對(duì)象分?jǐn)?shù)增加了10

3. 對(duì)對(duì)象是值調(diào)用還是引用傳遞?

首先編寫一個(gè)交換兩個(gè)學(xué)生的方法:

public static void swap(Student x, Student y) {
   Student temp = x;
   x = y;
   y = temp;
}

如果java對(duì)對(duì)象是采用的是引用傳遞,那個(gè)這個(gè)方法是可以的。那么x,y對(duì)象的分?jǐn)?shù)是交換的??聪旅娴睦樱?/p>

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;
   }
}

【運(yùn)行結(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

可以看出,兩者并沒(méi)有實(shí)現(xiàn)交換。說(shuō)明引用傳遞的說(shuō)法是不正確的。接下來(lái)一步一步看看swap調(diào)用的過(guò)程:

  1. 將對(duì)象a,b的拷貝分別賦值給x,y,此時(shí)a和x指向同一對(duì)象,b和y指向同一對(duì)象
  2. swap方法體完成x,y的的交換,此時(shí)a,b并沒(méi)有變化
  3. 方法執(zhí)行完成,x和y不再使用,a依舊指向new Student(0),b指向new Student(100)

首先,創(chuàng)建兩個(gè)對(duì)象:

然后,進(jìn)入方法體,將對(duì)象a,b的拷貝分別賦值給x,y:

接著,交換x,y的值:

swap執(zhí)行完成,x,y不再使用,回到創(chuàng)建時(shí)狀態(tài)。

從這個(gè)過(guò)程中可以看出,Java對(duì)對(duì)象采用的不是引用調(diào)用,實(shí)際上,對(duì)象引用進(jìn)行的是值傳遞。

總結(jié)一下java中方法參數(shù)的使用情況:

  • 一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類型的參數(shù)(即數(shù)值型和布爾型)
  • 一個(gè)方法可以改變一個(gè)對(duì)象參數(shù)的狀態(tài)
  • 一個(gè)方法不能讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象

網(wǎng)頁(yè)標(biāo)題:探究java關(guān)于值傳遞還是引用傳遞的問(wèn)題
網(wǎng)頁(yè)網(wǎng)址:http://www.5511xx.com/article/dpcihco.html