麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java交換兩個變量的數值

2019-11-14 15:11:03
字體:
來源:轉載
供稿:網友

一、參數傳遞方法

為解決標題問題,首先介紹參數傳遞方法。目前各類程序設計語言的參數傳遞方法主要有三種:

  1. 按值傳遞
  2. 按引用傳遞
  3. 按指針傳遞

其中按值傳遞表示方法(函數)接收的是調用者提供的變量的拷貝,不改變參數的值;按引用傳遞表示方法(函數)接收的調用者提供的變量地址;按指針傳遞表示方法(函數)接收的是調用者提供的指針的拷貝,不改變指針的值和地址,但可以改變指針所指向的地址。

二、java參數傳遞方法

Java提供的參數傳遞方法,很遺憾只有一種,按值傳遞。也就是說,方法得到的是所有參數值的一個拷貝,方法不能修改傳遞給它的參數變量的內容。

Java的方法參數類型可以分為兩類:

  1. 基本數據類型
  2. 對象引用

有過Java開發經驗的朋友都知道,對于基本數據類型,Java方法無法改變變量內容。那對自定義類的對象引用是否也不能修改內容呢?可以通過一個簡單的例子說明。代碼如下:

 

public class MyClass{    PRivate Object num;    public MyClass(Object num){        this.num=num;    }        public Object getNum() {        return num;    }    public void setNum(Object num) {        this.num = num;    }}

 

public class Main {        public static void change(MyClass myClass){        myClass.setNum(100);    }                public static void main(String[] args){        MyClass a=new MyClass(10);        System.out.println("調用change方法前的值為:"+a.getNum());        change(a);        System.out.println("調用change方法后的值為:"+a.getNum());    }    }

上面代碼執行輸出結果如下:

 

 

 

從結果中可以看出,change方法能夠修改對象的狀態。也就是說Java方法可以改變對象的參數狀態。那這是否意味著Java方法對于自定義的數據類型(自定義類)的參數采用的是引用傳遞?為了確認結果可以編寫個簡單例子,所有的自定義類仍然是上面的MyClass。代碼如下:

public static void swap(MyClass a,MyClass b){        MyClass tmp=a;        a=b;        b=tmp;    }        public static void main(String[] args){        MyClass a=new MyClass(10);        MyClass b=new MyClass(100);        System.out.println("交換之前a的值為:"+a.getNum());        System.out.println("交換之前b的值為:"+b.getNum());        swap(a,b);        System.out.println("交換之后a的值為:"+a.getNum());        System.out.println("交換之后b的值為:"+b.getNum());    }}

執行結果如下:

通過上面結果可以發現,Java方法對自定義類的參數傳遞使用的仍然是值傳遞,不是引用傳遞。那為什么Java方法能夠修改對象狀態呢?

可以考慮調用change方法的具體執行過程,從中尋找答案。

調用change方法事,具體的執行過程是:

  1. myClass被初始化成實參a的copy,這是對對象的引用。
  2. setNum方法應用于這個對象的引用。myClass和a同時引用的那個MyClass對象的num變為了100。
  3. 方法結束后,參數變量myClass不再使用。而a繼續引用那個num變為100的MyClass對象。如下圖所示。

所以,Java方法能夠實現改變對象參數狀態的原因是:方法得到的是對象引用的拷貝,對象引用及方法中的其他拷貝同時引用同一個對象。

現在,總結一下Java的方法參數使用:

  • 方法不能修改一個基本數據類型的參數;
  • 方法可以改變對象參數的狀態;
  • 方法不能讓對象參數引用一個新的對象(原因參考調用change方法時的具體執行過程)。

三、交換變量的數值

既然已經知其所以然,那么知其然就不是難事了。直接貼出我的個人代碼:

 

public static void swap(MyClass a,MyClass b){        Object tmp=a.getNum();        a.setNum(b.getNum());        b.setNum(tmp);}

 

執行結果如下:

交換有效。

參考文獻:Java核心技術 卷Ⅰ。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色交视频| 99激情| 激情视频免费看 | 久草在线新时代视觉 | 免费男女乱淫真视频 | 亚洲精品一区二区三区大胸 | 国产一区二区欧美 | 毛片在线视频观看 | 天天夜夜草 | 精品av在线播放 | 美女久久久久 | 亚洲性生活视频 | 久久国产精品一区 | av免费在线播放网址 | 亚洲人成网站免费播放 | 看a级毛片 | 亚洲精品午夜在线 | 欧美成人精品h版在线观看 久久久久久三区 | 亚洲第一成人久久网站 | 九九热精品免费 | 久久久av亚洲男天堂 | 巨根插入 | 国产精品91在线 | 色淫视频 | 中文字幕精品在线视频 | 美女污污视频在线观看 | 久久久精品综合 | 亚洲综合无码一区二区 | 欧美a在线看 | 欧美成人视 | 99精品视频一区二区三区 | aa国产视频一区二区 | 成人福利在线播放 | 久久大陆 | 亚洲国产超高清a毛毛片 | 久久久国产一区二区三区 | 调教小男生抽打尿孔嗯啊视频 | 91短视频在线播放 | 久久久久久久久久久一区 | 国产一级毛片网站 | 精品亚洲二区 |