Java方法參數(shù)傳遞機(jī)制的原理解析-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Java方法參數(shù)傳遞機(jī)制的原理解析”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java方法參數(shù)傳遞機(jī)制的原理解析”吧!

成都創(chuàng)新互聯(lián)公司基于成都重慶香港及美國(guó)等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)電信內(nèi)江機(jī)房,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。

Java方法中如果聲明了形參,在調(diào)用方法時(shí)就必須給這些形參指定參數(shù)值,實(shí)際傳進(jìn)去的這個(gè)值就叫做實(shí)參。這就涉及到Java中的參數(shù)傳遞機(jī)制,值傳遞。

基本數(shù)據(jù)類型

基本數(shù)據(jù)類型,值傳遞的體現(xiàn)是數(shù)值的傳遞。

public class TransferTempTest {  public static void main(String[] args) {    //基本數(shù)據(jù)類型參數(shù)傳遞    TransferTempTest test = new TransferTempTest();    int num1 = 10;    int num2 = 20;    System.out.println("進(jìn)行交換前:");    System.out.println("num1 = " + num1 + ",num2 = " + num2);    test.swap(num1, num2);    System.out.println("交換之后:");    System.out.println("num1 = " + num1 + ",num2 = " + num2);  }  public void swap(int a, int b) {    int temp = a;    a = b;    b = temp;    System.out.println("交換過(guò)程中:");    System.out.println("num1 = " + a + ",num2 = " + b);  }}

//運(yùn)行結(jié)果進(jìn)行交換前:num1 = 10,num2 = 20交換過(guò)程中:num1 = 20,num2 = 10交換之后:num1 = 10,num2 = 20

如圖所示:

在堆內(nèi)存中創(chuàng)建 TransferTempTest類型的對(duì)象,假設(shè)此時(shí)地址值時(shí)0x1177(只是假設(shè)),并讓棧內(nèi)存中的引用變量test存儲(chǔ)0x1177,指向該對(duì)象。  在棧內(nèi)存中聲明兩個(gè)變量num1和num2,并為他們賦值10和20。這時(shí)可以看到打印的結(jié)果為:num1 = 10,num2 = 20  程序繼續(xù)向下,進(jìn)入swap方法,首先在棧區(qū)聲明兩個(gè)變量a和b,他們都是形參,這時(shí)將num1和num2的值分別傳入,此時(shí)如藍(lán)色字體所顯示,a=10,b=20。  接著還是在棧區(qū)聲明一個(gè)名為temp的變量,這時(shí)執(zhí)行的交換過(guò)程是在swap方法中,交換的變量其實(shí)是num1和num2的拷貝值,所以方法內(nèi)打印:num1 = 20,num2 = 10  最后,退出這個(gè)方法,局部變量銷毀,發(fā)現(xiàn)其實(shí)一頓操作,原先的值根本就沒(méi)有改變,打印結(jié)果和原先一樣:num1 = 10,num2 = 20

引用數(shù)據(jù)類型

基本數(shù)據(jù)類型,值傳遞的體現(xiàn)是地址值的傳遞。

public class TransferTempTest {  public static void main(String[] args) {  //引用類型參數(shù)傳遞    DataTemp data = new DataTemp();    data.a = 2;    data.b = 4;    System.out.println("進(jìn)行交換前:");    System.out.println("data.a = " + data.a + ",data.b = " + data.b);    data.swapClass(data);    System.out.println("進(jìn)行交換后:");    System.out.println("data.a = " + data.a + ",data.b = " + data.b);  }}class DataTemp {  int a;  int b;  public void swapClass(DataTemp data) {    int temp = data.a;    data.a = data.b;    data.b = temp;    System.out.println("交換過(guò)程中:");    System.out.println("data.a = " + data.a + ",data.b = " + data.b);  }}

//運(yùn)行結(jié)果進(jìn)行交換前:data.a = 2,data.b = 4交換過(guò)程中:data.a = 4,data.b = 2進(jìn)行交換后:data.a = 4,data.b = 2

如圖所示:

  1. 在堆內(nèi)存中創(chuàng)建DataTemp類型的對(duì)象,并讓棧內(nèi)存中的引用變量data存儲(chǔ)0x7788(假設(shè)地址值),指向該對(duì)象,實(shí)例變量a和b的初始值都是0。  讓data.a=2,data.b=4,如藍(lán)色字體顯示,這時(shí)打?。篸ata.a = 2,data.b = 4  進(jìn)入swapClass方法,首先在棧區(qū)聲明形參變量data,將原來(lái)的data的地址值傳入,紅黑兩個(gè)data不是同一個(gè)!!,紅色data只是黑色data的拷貝值,且拷貝的是地址值。這時(shí)兩個(gè)data指向同一片堆區(qū)內(nèi)存,如紅色箭頭顯示。  接著還是在棧區(qū)聲明一個(gè)名為temp的變量,參與交換操作,這時(shí)操作的是堆區(qū)的數(shù)據(jù),所以方法里顯然打?。篸ata.a = 4,data.b = 2  最后,退出這個(gè)方法,局部變量銷毀,執(zhí)行的交換過(guò)程雖然是在swapClass方法中,但引用變量傳入形參傳遞的是地址值,意味著,這時(shí)的交換操作直接對(duì)堆區(qū)對(duì)象生效,所以最終交換成立:data.a = 4,data.b = 2

綜合練習(xí)

package com.my.pac05;public class TransferTest {  public static void main(String[] args) {    TransferTest test = new TransferTest();    test.first();  }  public void first() {    int i = 5;    Value v = new Value();    v.i = 25;    second(v, i);    System.out.println(v.i);  }  public void second(Value v, int i) {    i = 0;    v.i = 20;    Value val = new Value();    v = val;    System.out.println(v.i + " " + i);  }}class Value {  int i = 15;}

//運(yùn)行結(jié)果15 020

總結(jié)

方法不能修改基本數(shù)據(jù)類型的參數(shù),他們改變的僅僅是他們的拷貝。  方法可以改變對(duì)象參數(shù)的狀態(tài),因?yàn)榉椒梢酝ㄟ^(guò)對(duì)象引用的拷貝修改對(duì)象狀態(tài)。  方法不能讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象,方法得到的永遠(yuǎn)都是拷貝值。

到此,相信大家對(duì)“Java方法參數(shù)傳遞機(jī)制的原理解析”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站欄目:Java方法參數(shù)傳遞機(jī)制的原理解析-創(chuàng)新互聯(lián)
URL鏈接:http://bm7419.com/article24/gecje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、GoogleChatGPT、網(wǎng)站維護(hù)、軟件開(kāi)發(fā)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)