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

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

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

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

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

對(duì)于程序設(shè)計(jì)語(yǔ)言來(lái)說(shuō),一般方法(函數(shù))的參數(shù)傳遞有兩種:按值傳遞和按引用傳遞。

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

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

Java中的參數(shù)傳遞

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

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

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

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

public class Test {
  public static void main(String[] args) {
    Test t = new Test();
    int a = 5;
    t.method(a); // 傳遞后,method方法對(duì)變量值的改變不影響這里的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

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

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

在方法調(diào)用時(shí),傳遞的參數(shù)按引用進(jìn)行傳遞,其實(shí)傳遞的引用的地址,也就是變量所對(duì)應(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變量
    // 請(qǐng)注意:這兩個(gè)person變量是完全不同的,不要被名稱(chēng)相同所蒙蔽
    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)建一個(gè)對(duì)象
    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

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

下面我們接著看一個(gè)例子:

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方法時(shí)實(shí)際傳遞的是引用的地址值。

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

由于String類(lèi)是final修飾的,不可變,它會(huì)在內(nèi)存中在開(kā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ù)類(lèi)型傳遞的是值的復(fù)制,對(duì)一個(gè)參數(shù)的修改不會(huì)影響另一個(gè)參數(shù);

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

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

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

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

相關(guān)文章

最新評(píng)論

泾源县| 宜君县| 砀山县| 郸城县| 务川| 芦山县| 乐至县| 乳源| 北安市| 秭归县| 砚山县| 平定县| 会同县| 泗水县| 阳朔县| 东安县| 双牌县| 竹溪县| 德格县| 苗栗市| 延安市| 丹巴县| 呼玛县| 诸城市| 惠水县| 始兴县| 巩义市| 新巴尔虎右旗| 凯里市| 北辰区| 大关县| 肇庆市| 喜德县| 九寨沟县| 德令哈市| 师宗县| 衡山县| 特克斯县| 高陵县| 大宁县| 丁青县|