您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Java的傳值與傳引用是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
通常的說法是:對于基本數(shù)據(jù)類型(整型、浮點型、字符型、布爾型等),傳值;對于引用類型(對象、數(shù)組),傳引用?;绢愋蛡髦?,所有人都不會對此有疑義;問題出在引用類型上。
為引入正題,不妨先看看下面的例子,你能正確給出程序的運行結(jié)果嘛?
/** * @(#)Swap.java * * * @author * @version 1.00 2007/1/5 */ public class Swap { public Swap() {} public static void main(String[] args) { Changer c = new Changer(); String stra = " Mighty " ; String strb = " Mouse " ; c.swap(stra, strb); System.out.println(stra + " " + strb); String[] strArr = new String[ 2 ] ; strArr[ 0 ] = stra; strArr[ 1 ] = strb; c.swap(strArr); System.out.println(strArr[ 0 ] + " " + strArr[ 1 ]); } static class Changer { public < T > void swap(T a, T b) { T temp = a; a = b; b = temp; } public < T > void swap(T[] t) { if (t.length < 2 ) { System.out.println( " error! " ); return ; } T temp = t[ 0 ]; t[ 0 ] = t[ 1 ]; t[ 1 ] = temp; } } }
上面程序的正確運行結(jié)果為:
Mighty Mouse
Mouse Mighty
你答對了嘛?
下面我們來分析一下:為什么會出現(xiàn)上面的運行結(jié)果?
為分析這個問題,我們必須對程序中的數(shù)據(jù)在內(nèi)存中的布局有一定了解。上面main程序中和String相關(guān)的變量共有3個,其布局可以用下圖所示:
當調(diào)用swap(stra, strb)函數(shù)時,傳遞的是引用類型stra、strb的拷貝值,因此函數(shù)中任何對參數(shù)的改變都不會影響到stra和strb的值;而調(diào)用swap(strArr)時,傳遞的是strArr的拷貝值,程序中對參數(shù)的任何改變?nèi)匀徊粫绊懙絪trArr的值,然而swap(T[] t)中改變的并不是strArr的值,而是strArr[0]和strArr[1]的值,也就是引用類型strArr所指向的對象的值,因而strArr[0]和strArr[1]的值發(fā)生了變化。
從上面的分析,我們可以得出結(jié)論:對于引用類型,其實參數(shù)傳遞時仍然是按值傳遞的;當然,按引用傳遞也不是完全沒有道理,只是參考對象不是引用類型本身,而是引用類型所指向的對象。
“Java的傳值與傳引用是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。