亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java 交換兩個(gè)變量的數(shù)值實(shí)現(xiàn)方法

 更新時(shí)間:2016年07月15日 09:21:01   投稿:jingxian  
下面小編就為大家?guī)硪黄狫ava 交換兩個(gè)變量的數(shù)值實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一、參數(shù)傳遞方法

為解決標(biāo)題問題,首先介紹參數(shù)傳遞方法。目前各類程序設(shè)計(jì)語言的參數(shù)傳遞方法主要有三種:

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

其中按值傳遞表示方法(函數(shù))接收的是調(diào)用者提供的變量的拷貝,不改變參數(shù)的值;按引用傳遞表示方法(函數(shù))接收的調(diào)用者提供的變量地址;按指針傳遞表示方法(函數(shù))接收的是調(diào)用者提供的指針的拷貝,不改變指針的值和地址,但可以改變指針?biāo)赶虻牡刂贰?/p>

二、Java參數(shù)傳遞方法

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

Java的方法參數(shù)類型可以分為兩類:

1.基本數(shù)據(jù)類型
2.對象引用

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

pubpc class MyClass{
  private Object num;

  pubpc MyClass(Object num){
    this.num=num;
  }
  
  pubpc Object getNum() {
    return num;
  }

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

上面代碼執(zhí)行輸出結(jié)果如下:

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

pubpc static void swap(MyClass a,MyClass b){
    MyClass tmp=a;
    a=b;
    b=tmp;
  }
  
  pubpc 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());
  }
}

執(zhí)行結(jié)果如下:

通過上面結(jié)果可以發(fā)現(xiàn),Java方法對自定義類的參數(shù)傳遞使用的仍然是值傳遞,不是引用傳遞。那為什么Java方法能夠修改對象狀態(tài)呢?

可以考慮調(diào)用change方法的具體執(zhí)行過程,從中尋找答案。

調(diào)用change方法事,具體的執(zhí)行過程是:

myClass被初始化成實(shí)參a的copy,這是對對象的引用。

setNum方法應(yīng)用于這個(gè)對象的引用。myClass和a同時(shí)引用的那個(gè)MyClass對象的num變?yōu)榱?00。

方法結(jié)束后,參數(shù)變量myClass不再使用。而a繼續(xù)引用那個(gè)num變?yōu)?00的MyClass對象。如下圖所示。

所以,Java方法能夠?qū)崿F(xiàn)改變對象參數(shù)狀態(tài)的原因是:方法得到的是對象引用的拷貝,對象引用及方法中的其他拷貝同時(shí)引用同一個(gè)對象。

現(xiàn)在,總結(jié)一下Java的方法參數(shù)使用:

方法不能修改一個(gè)基本數(shù)據(jù)類型的參數(shù);

方法可以改變對象參數(shù)的狀態(tài);

方法不能讓對象參數(shù)引用一個(gè)新的對象(原因參考調(diào)用change方法時(shí)的具體執(zhí)行過程)。

三、交換變量的數(shù)值

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

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

執(zhí)行結(jié)果如下:

交換有效。

參考文獻(xiàn):Java核心技術(shù) 卷Ⅰ。

以上這篇Java 交換兩個(gè)變量的數(shù)值實(shí)現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java泛型的用法及T.class的獲取過程解析

    Java泛型的用法及T.class的獲取過程解析

    這篇文章主要介紹了Java泛型的用法及T.class的獲取過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java實(shí)現(xiàn)帶緩沖的輸入輸出流

    Java實(shí)現(xiàn)帶緩沖的輸入輸出流

    本文詳細(xì)講解了Java實(shí)現(xiàn)帶緩沖的輸入輸出流,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • springboot下實(shí)現(xiàn)RedisTemplate?List?清空

    springboot下實(shí)現(xiàn)RedisTemplate?List?清空

    我們經(jīng)常會使用Redis的List數(shù)據(jù)結(jié)構(gòu)來存儲一系列的元素,當(dāng)我們需要清空一個(gè)List時(shí),可以使用RedisTemplate來實(shí)現(xiàn),本文就來詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2024-01-01
  • Java中的equsals和==

    Java中的equsals和==

    這篇文章主要介紹了Java中的equsals和==的相關(guān)內(nèi)容,感興趣的朋朋友可以參考下文
    2021-08-08
  • 通過java記錄數(shù)據(jù)持續(xù)變化時(shí)間代碼解析

    通過java記錄數(shù)據(jù)持續(xù)變化時(shí)間代碼解析

    這篇文章主要介紹了通過java記錄數(shù)據(jù)持續(xù)變化時(shí)間代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • JAVA實(shí)現(xiàn)將磁盤中所有空文件夾進(jìn)行刪除的代碼

    JAVA實(shí)現(xiàn)將磁盤中所有空文件夾進(jìn)行刪除的代碼

    這篇文章主要介紹了JAVA實(shí)現(xiàn)將磁盤中所有空文件夾進(jìn)行刪除的代碼,需要的朋友可以參考下
    2017-06-06
  • Spring Boot處理全局統(tǒng)一異常的兩種方法與區(qū)別

    Spring Boot處理全局統(tǒng)一異常的兩種方法與區(qū)別

    這篇文章主要給大家介紹了關(guān)于Spring Boot處理全局統(tǒng)一異常的兩種方法與區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 解決java idea新建子目錄時(shí)命名不是樹形結(jié)構(gòu)的問題

    解決java idea新建子目錄時(shí)命名不是樹形結(jié)構(gòu)的問題

    這篇文章主要介紹了解決java idea新建子目錄時(shí)命名不是樹形結(jié)構(gòu)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • java網(wǎng)上圖書商城(7)訂單模塊2

    java網(wǎng)上圖書商城(7)訂單模塊2

    這篇文章主要為大家詳細(xì)介紹了java網(wǎng)上圖書商城,訂單模塊第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • SpringBoot 下集成緩存工具類 CacheManager

    SpringBoot 下集成緩存工具類 CacheManager

    這篇文章主要介紹了Springboot下集成緩存工具類CacheManager,想進(jìn)一步了解相關(guān)知識的同學(xué),可以詳細(xì)閱讀本文
    2023-03-03

最新評論