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

Java方法的參數(shù)傳遞機(jī)制實例詳解

 更新時間:2019年09月06日 11:22:50   作者:下班后的爪哇菌  
這篇文章主要介紹了Java方法的參數(shù)傳遞機(jī)制,結(jié)合實例形式詳細(xì)分析了java方法參數(shù)傳遞機(jī)制原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下

本文實例講述了Java方法的參數(shù)傳遞機(jī)制。分享給大家供大家參考,具體如下:

參數(shù)傳遞機(jī)制

對于程序設(shè)計語言來說,一般方法(函數(shù))的參數(shù)傳遞有兩種:按值傳遞和按引用傳遞。

按值傳遞意味著當(dāng)將一個參數(shù)傳遞給一個方法時,方法接收的是原始值的一個副本。因此,如果方法修改了該參數(shù),僅改變副本,而原始值保持不變。按引用傳遞意味著當(dāng)將一個參數(shù)傳遞給一個方法時,方法接收的是原始值的內(nèi)存地址,而不是值的副本。因此,如果方法修改了該參數(shù),調(diào)用代碼中的原始值也隨之改變。

需要注意的是,方法可以修改按引用傳遞的參數(shù)對應(yīng)的變量值,但不可以修改按值傳遞的參數(shù)對應(yīng)的變量值,這是兩者的最大區(qū)別。

Java中的參數(shù)傳遞

Java中的參數(shù)傳遞機(jī)制只有一種,就是值傳遞。在Java中并沒有C++的引用傳遞這種參數(shù)傳遞機(jī)制,它所有的參數(shù)傳遞都遵循值傳遞的機(jī)制。

Java中對于對象(數(shù)組,類,接口)的傳遞似乎有點像引用傳遞,可以改變對象中某個屬性的值。但是不要被這個假象所蒙蔽,實際上這個傳入方法的值是對象引用的拷貝,即傳遞的是引用的地址值,所以還是按值傳遞。

基本類型的參數(shù)傳遞

在方法調(diào)用時,傳遞的參數(shù)是按值的拷貝傳遞;

public class Test {
  public static void main(String[] args) {
    Test t = new Test();
    int a = 5;
    t.method(a); // 傳遞后,method方法對變量值的改變不影響這里的a
    System.out.println("method調(diào)用完后的a: " + a);
  }
  private void method(int a){
    System.out.println("method中重新賦值之前的a: " + a);
    a = 10;
    System.out.println("method中重新賦值之后的a: " + a);
  } 
}

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

method中重新賦值之前的a: 5
method中重新賦值之后的a: 10
method調(diào)用完后的a: 5

由此可知按值傳遞重要特點:傳遞的是值的拷貝,也就是說傳遞后就互不相關(guān)了。下面看一下內(nèi)存分析:

引用類型的參數(shù)傳遞

在方法調(diào)用時,傳遞的參數(shù)按引用進(jìn)行傳遞,其實傳遞的引用的地址,也就是變量所對應(yīng)的內(nèi)存空間的地址。

public class Test {
  public static void main(String[] args) {
    Person person = new Person();
    person.age = 18;
    // 把main方法中的變量person所引用的內(nèi)存空間地址,按引用傳遞給method方法中的person變量
    // 請注意:這兩個person變量是完全不同的,不要被名稱相同所蒙蔽
    method(person);
    System.out.println("調(diào)用method方法之后:" + person.age);
  }
  public static void method(Person person){
    person.age = 20;
    System.out.println("method方法內(nèi)第一次修改:" + person.age);
    person = new Person(); // 新創(chuàng)建一個對象
    person.age = 25;
    System.out.println("method方法內(nèi)第二次修改:" + person.age);
  }
}
class Person {
  public int age;
}

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

method方法內(nèi)第一次修改:20
method方法內(nèi)第二次修改:25
調(diào)用method方法之后:20

這里傳遞的是值的引用,也就是說傳遞前和傳遞后都指向同一個引用(也就是同一個內(nèi)存空間)。

下面我們接著看一個例子:

public class Test {
  public static void main(String[] args) {
    int[] a = {5, 10};
    method(a);
    System.out.println("調(diào)用完method方法之后:" + a[0]);
  }
  public static void method(int[] a){
    System.out.println("method內(nèi)修改a[0]之前:" + a[0]);
    a[0] = 50;
    System.out.println("method內(nèi)修改a[0]之后:" + a[0]);
  }
}

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

method內(nèi)修改a[0]之前:5
method內(nèi)修改a[0]之后:50
調(diào)用完method方法之后:50

根據(jù)結(jié)果可知,調(diào)用method方法時實際傳遞的是引用的地址值。

傳遞String類型的參數(shù)

由于String類是final修飾的,不可變,它會在內(nèi)存中在開辟一塊新空間。

public class Test {
  public static void main(String[] args) {
    String str1 = new String("test1");
    String str2 = "test2";
    method(str1, str2);
    System.out.println("調(diào)用method傳參str1之后:" + str1 + ", " + str2);
  }
  public static void method(String str1, String str2){
    System.out.println("method內(nèi)修改str之前:" + str1 + ", " + str2);
    str1 = "new1";
    str2 = "new2";
    System.out.println("method內(nèi)修改str之后:" + str1 + ", " + str2);
  }
}

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

method內(nèi)修改str之前:test1, test2
method內(nèi)修改str之后:new1, new2
調(diào)用method傳參str1之后:test1, test2

總結(jié):

1)基本數(shù)據(jù)類型傳遞的是值的復(fù)制,對一個參數(shù)的修改不會影響另一個參數(shù);

2)引用類型傳引用,形參和實參指向同一個內(nèi)存地址(同一個對象),所以對參數(shù)的修改會影響到實際的對象;

3)String、Integer、Double等immutable的類型特殊處理,可以理解為傳值,最后的操作不會修改實參對象(與基本數(shù)據(jù)類型一致)。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • java反射技術(shù)與類使用示例

    java反射技術(shù)與類使用示例

    這篇文章主要介紹了java反射技術(shù)與類使用示例,需要的朋友可以參考下
    2014-04-04
  • Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問題小結(jié)

    Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問題小結(jié)

    這篇文章主要介紹了Java8 中使用Stream 讓List 轉(zhuǎn) Map使用總結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-06-06
  • Java下變量大小寫駝峰、大小寫下劃線、大小寫連線轉(zhuǎn)換

    Java下變量大小寫駝峰、大小寫下劃線、大小寫連線轉(zhuǎn)換

    有時候需要處理對象屬性的getter、setter方法,或者將屬性與數(shù)據(jù)表字段進(jìn)行相互轉(zhuǎn)換,感興趣的可以了解一下
    2021-06-06
  • MyBatis-Plus?updateById更新不了空字符串或null的解決方法

    MyBatis-Plus?updateById更新不了空字符串或null的解決方法

    本文主要介紹了MyBatis-Plus?updateById更新不了空字符串或null的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Springboot使用SPI注冊bean到spring容器的示例代碼

    Springboot使用SPI注冊bean到spring容器的示例代碼

    這篇文章主要介紹了Springboot使用SPI注冊bean到spring容器,主要包括mydriver接口,mysqldriver實現(xiàn)過程,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Intellij IDEA命令行執(zhí)行java無法加載主類解決方案

    Intellij IDEA命令行執(zhí)行java無法加載主類解決方案

    這篇文章主要介紹了Intellij IDEA命令行執(zhí)行java無法加載主類解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Spring RedirectAttributes參數(shù)跳轉(zhuǎn)代碼實例

    Spring RedirectAttributes參數(shù)跳轉(zhuǎn)代碼實例

    這篇文章主要介紹了Spring RedirectAttributes參數(shù)跳轉(zhuǎn)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Maven安裝與配置及Idea配置Maven的全過程

    Maven安裝與配置及Idea配置Maven的全過程

    Maven是一個項目管理工具,可以對Java項目進(jìn)行自動化的構(gòu)建和依賴管理,下面這篇文章主要給大家介紹了關(guān)于Maven安裝與配置及Idea配置Maven的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫詳解

    Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫詳解

    這篇文章主要為大家詳細(xì)介紹了Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫的相關(guān)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 解決idea中servlet報紅問題

    解決idea中servlet報紅問題

    這篇文章主要介紹了解決idea中servlet報紅問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論

昆山市| 松滋市| 普宁市| 赣州市| 稷山县| 瓦房店市| 石河子市| 鹤岗市| 鲁甸县| 嘉兴市| 济南市| 柳江县| 枣庄市| 峨边| 互助| 洛扎县| 右玉县| 会东县| 循化| 邢台市| 景东| 南阳市| 尼木县| 河西区| 邵阳县| 龙川县| 方山县| 保德县| 孟津县| 彭水| 康乐县| 浑源县| 安达市| 耿马| 潼南县| 虹口区| 土默特右旗| 镇远县| 大厂| 牟定县| 潼南县|