最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 值傳遞和引用傳遞詳解及實例代碼

 更新時間:2017年03月01日 11:49:31   投稿:lqh  
這篇文章主要介紹了 Java 值傳遞和引用傳遞詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下

 Java 值傳遞和引用傳遞

前言:

當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞? 

    答:是值傳遞。Java 編程語言只有值傳遞參數(shù)。當(dāng)一個對象實例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是該對象的引用一個副本。指向同一個對象,對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用(不是引用的副本)是永遠不會改變的。

Java參數(shù),不管是原始類型還是引用類型,傳遞的都是副本(有另外一種說法是傳值,但是說傳副本更好理解吧,傳值通常是相對傳址而言)。

    如果參數(shù)類型是原始類型,那么傳過來的就是這個參數(shù)的一個副本,也就是這個原始參數(shù)的值,這個跟之前所談的傳值是一樣的。如果在函數(shù)中改變了副本的 值不會改變原始的值. 

   如果參數(shù)類型是引用類型,那么傳過來的就是這個引用參數(shù)的副本,這個副本存放的是參數(shù)的地址。如果在函數(shù)中沒有改變這個副本的地址,而是改變了地址中的 值,那么在函數(shù)內(nèi)的改變會影響到傳入的參數(shù)。如果在函數(shù)中改變了副本的地址,如new一個,那么副本就指向了一個新的地址,此時傳入的參數(shù)還是指向原來的 地址,所以不會改變參數(shù)的值。

實例代碼:

public class ParamTest {
   public static void main(String[] args){
      /**
       * Test 1: Methods can't modify numeric parameters
       */
      System.out.println("Testing tripleValue:");
      double percent = 10;
      System.out.println("Before: percent=" + percent);
      tripleValue(percent);
      System.out.println("After: percent=" + percent);
 
      /**
      * Test 2: Methods can change the state of object parameters
      */
      System.out.println("\nTesting tripleSalary:");
  Employee harry = new Employee("Harry", 50000);
      System.out.println("Before: salary=" + harry.getSalary());
      tripleSalary(harry);
      System.out.println("After: salary=" + harry.getSalary());
      /**
      * Test 3: Methods can't attach new objects to object parameters
      */
      System.out.println("\nTesting swap:");
      Employee a = new Employee("Alice", 70000);
      Employee b = new Employee("Bob", 60000);
      System.out.println("Before: a=" + a.getName());
      System.out.println("Before: b=" + b.getName());
      swap(a, b);
      System.out.println("After: a=" + a.getName());
      System.out.println("After: b=" + b.getName());
   }
 
   private static void swap(Employee x, Employee y) {
     Employee temp = x;
     x=y;
     y=temp;
     System.out.println("End of method: x=" + x.getName());
     System.out.println("End of method: y=" + y.getName());
   }
 
   private static void tripleSalary(Employee x) {
     x.raiseSalary(200);
     System.out.println("End of method: salary=" + x.getSalary());
   }
 
   private static void tripleValue(double x) {
     x=3*x;
     System.out.println("End of Method X= "+x);
   }
 }

  顯示結(jié)果:

Testing tripleValue:
Before: percent=10.0
End of Method X= 30.0
After: percent=10.0

Testing tripleSalary:
Before: salary=50000.0
End of method: salary=150000.0
After: salary=150000.0

Testing swap:
Before: a=Alice
Before: b=Bob
End of method: x=Bob //可見引用的副本進行了交換
End of method: y=Alice
After: a=Alice //引用本身沒有交換
After: b=Bob

感謝 閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Maven setting.xml配置文件詳解

    Maven setting.xml配置文件詳解

    本篇文章主要介紹了Maven setting.xml 配置文件詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java基礎(chǔ)之代碼死循環(huán)詳解

    Java基礎(chǔ)之代碼死循環(huán)詳解

    這篇文章主要介紹了Java基礎(chǔ)之代碼死循環(huán)詳解,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java裁剪壓縮PNG圖片,透明背景色變黑的解決方案

    Java裁剪壓縮PNG圖片,透明背景色變黑的解決方案

    這篇文章主要介紹了Java裁剪壓縮PNG圖片,透明背景色變黑的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java ThreadPool線程池的使用,線程池工具類用法說明

    java ThreadPool線程池的使用,線程池工具類用法說明

    這篇文章主要介紹了java ThreadPool線程池的使用,線程池工具類用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring Security 構(gòu)建rest服務(wù)實現(xiàn)rememberme 記住我功能

    Spring Security 構(gòu)建rest服務(wù)實現(xiàn)rememberme 記住我功能

    這篇文章主要介紹了Spring Security 構(gòu)建rest服務(wù)實現(xiàn)rememberme 記住我功能,需要的朋友可以參考下
    2018-03-03
  • 深入理解java中的null“類型”

    深入理解java中的null“類型”

    這篇文章主要介紹了深入理解java中的null“類型”,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • SpringBoot如何獲取application.properties中自定義的值

    SpringBoot如何獲取application.properties中自定義的值

    這篇文章主要介紹了SpringBoot獲取application.properties中的自定義的值,目錄結(jié)構(gòu)文件代碼給大家列舉的非常詳細,需要的朋友可以參考下
    2021-09-09
  • flatten-maven-plugin使用教程

    flatten-maven-plugin使用教程

    這篇文章主要介紹了flatten-maven-plugin使用,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Spring Mvc下實現(xiàn)以文件流方式下載文件的方法示例

    Spring Mvc下實現(xiàn)以文件流方式下載文件的方法示例

    這篇文章主要介紹了Spring Mvc下實現(xiàn)以文件流方式下載文件的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 深入理解JDK8中Stream使用

    深入理解JDK8中Stream使用

    Stream 是 Java8 中處理集合的關(guān)鍵抽象概念,它可以指定你希望對集合進行的操作,可以執(zhí)行非常復(fù)雜的查找、過濾和映射數(shù)據(jù)等操作。這篇文章主要介紹了JDK8中Stream使用解析,需要的朋友可以參考下
    2021-06-06

最新評論

长沙县| 内江市| 台中市| 望谟县| 安塞县| 苏尼特左旗| 绥芬河市| 安义县| 吉安市| 龙井市| 通化县| 宣汉县| 科技| 大新县| 乌苏市| 东山县| 长武县| 蒙城县| 武穴市| 淮滨县| 哈尔滨市| 白朗县| 碌曲县| 泰兴市| 凌源市| 淮安市| 东港市| 阜新市| 扎鲁特旗| 伊吾县| 临湘市| 汤阴县| 嘉荫县| 甘德县| 大埔县| 横峰县| 隆德县| 荔波县| 湘潭市| 类乌齐县| 广汉市|