這篇文章將為大家詳細講解有關(guān)Java中方法參數(shù)傳遞機制的原理是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元龍?zhí)蹲鼍W(wǎng)站,已為上家服務(wù),為龍?zhí)陡鞯仄髽I(yè)和個人服務(wù),聯(lián)系電話:028-86922220
基本數(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("進行交換前:"); 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("交換過程中:"); System.out.println("num1 = " + a + ",num2 = " + b); } }
//運行結(jié)果 進行交換前: num1 = 10,num2 = 20 交換過程中: num1 = 20,num2 = 10 交換之后: num1 = 10,num2 = 20
整個過程的內(nèi)存圖演示:
如圖所示:
在堆內(nèi)存中創(chuàng)建 TransferTempTest類型的對象,假設(shè)此時地址值時0x1177(只是假設(shè)),并讓棧內(nèi)存中的引用變量test存儲0x1177,指向該對象。
在棧內(nèi)存中聲明兩個變量num1和num2,并為他們賦值10和20。這時可以看到打印的結(jié)果為:num1 = 10,num2 = 20
程序繼續(xù)向下,進入swap方法,首先在棧區(qū)聲明兩個變量a和b,他們都是形參,這時將num1和num2的值分別傳入,此時如藍色字體所顯示,a=10,b=20。
接著還是在棧區(qū)聲明一個名為temp的變量,這時執(zhí)行的交換過程是在swap方法中,交換的變量其實是num1和num2的拷貝值,所以方法內(nèi)打印:num1 = 20,num2 = 10
最后,退出這個方法,局部變量銷毀,發(fā)現(xiàn)其實一頓操作,原先的值根本就沒有改變,打印結(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("進行交換前:"); System.out.println("data.a = " + data.a + ",data.b = " + data.b); data.swapClass(data); System.out.println("進行交換后:"); 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("交換過程中:"); System.out.println("data.a = " + data.a + ",data.b = " + data.b); } }
//運行結(jié)果 進行交換前: data.a = 2,data.b = 4 交換過程中: data.a = 4,data.b = 2 進行交換后: data.a = 4,data.b = 2
整個過程的內(nèi)存圖顯示:
如圖所示:
在堆內(nèi)存中創(chuàng)建DataTemp類型的對象,并讓棧內(nèi)存中的引用變量data存儲0x7788(假設(shè)地址值),指向該對象,實例變量a和b的初始值都是0。
讓data.a=2,data.b=4,如藍色字體顯示,這時打?。篸ata.a = 2,data.b = 4
進入swapClass方法,首先在棧區(qū)聲明形參變量data,將原來的data的地址值傳入,紅黑兩個data不是同一個?。?紅色data只是黑色data的拷貝值,且拷貝的是地址值。這時兩個data指向同一片堆區(qū)內(nèi)存,如紅色箭頭顯示。
接著還是在棧區(qū)聲明一個名為temp的變量,參與交換操作,這時操作的是堆區(qū)的數(shù)據(jù),所以方法里顯然打印:data.a = 4,data.b = 2
最后,退出這個方法,局部變量銷毀,執(zhí)行的交換過程雖然是在swapClass方法中,但引用變量傳入形參傳遞的是地址值,意味著,這時的交換操作直接對堆區(qū)對象生效,所以最終交換成立: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; }
//運行結(jié)果 15 0 20
整個過程的內(nèi)存圖顯示:
1.SpringMVC,Spring Web MVC是一種基于Java的實現(xiàn)了Web MVC設(shè)計模式的請求驅(qū)動類型的輕量級Web框架。2.Shiro,Apache Shiro是Java的一個安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。4.Dubbo,Dubbo是一個分布式服務(wù)框架。5.Maven,Maven是個項目管理和構(gòu)建自動化工具。6.RabbitMQ,RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務(wù)器。7.Ehcache,EhCache 是一個純Java的進程內(nèi)緩存框架。
關(guān)于Java中方法參數(shù)傳遞機制的原理是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。