999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

JAVA語言中參數(shù)傳遞的深入剖析

2013-10-29 10:20:08陳蘭芹
湖北工程學(xué)院學(xué)報 2013年3期

李 冉,陳蘭芹

(荊楚理工學(xué)院 計算機工程學(xué)院,湖北 荊門448000)

Java語言中,參數(shù)傳遞機制對于初學(xué)者來說,一直是一個難點,也是一個重點。關(guān)于這方面的教材、論文和參考手冊很多,但是說法不一,有的模糊帶過。比如,有的認(rèn)為Java的參數(shù)傳遞分兩種情況,即值傳遞和引用傳遞;有的認(rèn)為Java中所有的參數(shù)傳遞都是按值傳遞。其實這些說法都有一定的合理性,但是沒有清晰地說明它的基本原理,容易讓初學(xué)者陷入邏輯漩渦。本文參閱了各種說法,并結(jié)合了JDK的幫助文檔,首先從Java的變量內(nèi)存分配機制開始,全面深入地剖析Java語言中參數(shù)傳遞機制,并得出最合理的結(jié)論。

1 Java中變量的內(nèi)存分配機制

Java的內(nèi)存分配機制很復(fù)雜,這里只分析Java的變量內(nèi)存分配規(guī)則,以助于理解Java的參數(shù)傳遞機制,而不考慮它在堆區(qū)、棧區(qū)還是靜態(tài)數(shù)據(jù)區(qū),也不考慮生命周期。

1.1 Java的數(shù)據(jù)類型

Java的數(shù)據(jù)類型分為兩大類,分別是基本數(shù)據(jù)類型和引用數(shù)據(jù)類型[1]。基本數(shù)據(jù)類型,也稱為簡單數(shù)據(jù)類型,包括byte、char、short、int、long、float、double和boolean共8種;引用數(shù)據(jù)類型也稱為復(fù)雜數(shù)據(jù)類型,包括接口、類和數(shù)組共3種。

1.2 變量及其內(nèi)存分配規(guī)則

JVM根據(jù)變量的數(shù)據(jù)類型來分配內(nèi)存空間,Java中不同大類型的變量內(nèi)存分配規(guī)則不同。

1)對于基本數(shù)據(jù)類型

JVM對于基本數(shù)據(jù)類型的變量,只分配一定大小的內(nèi)存單元,用于存儲該變量的值。如果復(fù)制該變量,則是復(fù)制該內(nèi)存單元的值,例如:

double x=7.3;//定義了雙精度類型變量x,并賦初值為7.3

double y=x;//定義了雙精度類型變量y,并copy了x的值

對應(yīng)的內(nèi)存單元示意圖見圖1。

圖1 基本數(shù)據(jù)類型變量內(nèi)存分配圖

x變量的值復(fù)制給了y變量,此時,x、y是兩個值相同的但是完全獨立的兩個內(nèi)存單元。

2)對于引用數(shù)據(jù)類型

JVM對于引用數(shù)據(jù)類型的變量,也是分配一定大小的內(nèi)存單元,用于存儲該變量所指向的對象,該變量的值為對象的引用。如果復(fù)制該變量,實際上是復(fù)制了該變量內(nèi)存單元的值,而不是復(fù)制它所指的對象的值,例如:

Point p1=new Point(23,34);//Point為Java中一個已有的類

Point p2=p1;//將p1的值復(fù)制給了p2變量對應(yīng)的內(nèi)存單元示意圖見圖2。

圖2 引用數(shù)據(jù)類型變量內(nèi)存分配圖

p1變量的值復(fù)制給了p2變量,此時p1與p2存放的值是同一個對象的引用,即指向同一個對象,但是它們是兩個完全獨立的內(nèi)存單元。

對于p1和它所指向的對象,本質(zhì)上也是兩個完全不同的內(nèi)存單元。

2 Java參數(shù)傳遞機制

在Java語言中,參數(shù)傳遞是在程序運行過程中,實際參數(shù)將參數(shù)值傳遞給被調(diào)用的方法中相應(yīng)的形式參數(shù),然后實現(xiàn)對數(shù)據(jù)處理,或者完成特定的功能。實際參數(shù)是調(diào)用過程中,從主調(diào)方法傳遞給被調(diào)用方法的值,它可以是常量、變量或者表達式;形式參數(shù)是被調(diào)用方法用于接收并存儲實際參數(shù)值的變量[2]。

Java語言中,參數(shù)傳遞的機制只有一個,即將實際參數(shù)的值復(fù)制一份賦值給形式參數(shù),形式參數(shù)值的任何變化,不會影響到實參的值。實際參數(shù)可以是常量、變量或者表達式,變量又有很多種類型,但是都遵循這個機制。

2.1 實際參數(shù)為常量或者表達式的參數(shù)傳遞

Java語言中,常量和表達式都有值的屬性,在參數(shù)傳遞中,將常量的值或者表達式計算的值復(fù)制一份賦值給形式參數(shù)。在方法內(nèi)部,形式參數(shù)的值發(fā)生任何改變,不會影響到實際參數(shù)的值。實際上,常量和表達式的值不允許修改,也不可能修改。

2.2 實際參數(shù)為基本類型變量的參數(shù)傳遞

實際參數(shù)為基本類型變量時,參數(shù)傳遞過程中,將實參變量的值復(fù)制一份賦值給形式參數(shù)。實參變量和形參變量是兩個獨立的內(nèi)存單元,形參變量的值發(fā)生任何變化,不會影響到實參變量的值,如下例程很好地驗證這種傳遞邏輯關(guān)系。

運行結(jié)果如下:

在fun方法中,形參d的初始值,d=12.3

在fun方法中,形參d的初始值,d=15.3

在main方法中,實參f在fun方法執(zhí)行之后的值,f=12.3

執(zhí)行過程如圖3所示。

圖3 實參為簡單類型變量的參數(shù)傳遞執(zhí)行過程示意圖

2.3 實際參數(shù)為引用類型變量的參數(shù)傳遞

實際參數(shù)為引用類型變量時,參數(shù)傳遞不是實參變量所指向的對象的值,而是實參變量本身的值,即所指對象的引用。傳遞的實現(xiàn)就是將實參變量所存儲的引用的值復(fù)制一份賦值給形參變量,形參變量的內(nèi)存單元也存儲了該對象的引用值。但是形參變量與實參變量是兩個獨立的存儲單元,形參變量內(nèi)存單元值的變化不會影響到實參變量。如下例程很好地驗證了這種邏輯關(guān)系。

運行結(jié)果如下:

圖4 實參為引用類型變量的參數(shù)傳遞執(zhí)行過程示意圖

由圖3和圖4可以看出,引用類型實參到形參的參數(shù)傳遞,與簡單類型實參到形參的傳遞方式一樣,都是值的復(fù)制,只不過被復(fù)制的值的含義不同而已。

3 總結(jié)

在Java語言中,參數(shù)傳遞的機制本質(zhì)上就是值的復(fù)制,即只是從實際參數(shù)到形式參數(shù)變量的值的復(fù)制。也可以說,在Java中,參數(shù)傳遞都是按值傳遞的,就像快遞公司送包裹一樣,不關(guān)心包裹的內(nèi)容是什么。一些文章或者書籍中,將參數(shù)傳遞分為按值傳遞和按引用傳遞,是考慮了參數(shù)值的意義,這與Java參數(shù)傳遞的實現(xiàn)機制是沒有關(guān)系的。初學(xué)者只要搞清楚了Java中變量類型分類和內(nèi)存分配機制,就能靈活地使用參數(shù)傳遞機制。

[1]埃克爾.Java編程思想[M].陳昊鵬,譯.4版.北京:機械工業(yè)出版社,2007.

[2]昊斯特曼.Java核心技術(shù):卷I[M].葉乃文,鄺勁筠,杜永萍,譯.北京:機械工業(yè)出版社,2008.

主站蜘蛛池模板: 日韩国产精品无码一区二区三区| 国产一区亚洲一区| 亚洲第一在线播放| 久久一级电影| 98超碰在线观看| 无码专区在线观看| 国产免费看久久久| 国产噜噜噜视频在线观看| 欧美精品一区在线看| 国产精品一区不卡| 国产亚洲欧美在线视频| 狠狠色丁婷婷综合久久| 亚洲精品在线观看91| 亚洲高清无码精品| 97久久精品人人| 国产女人喷水视频| 91最新精品视频发布页| 国产精品人成在线播放| 九九香蕉视频| 欧美精品成人| 1级黄色毛片| 国产一区二区精品福利| 亚洲天堂在线免费| 午夜日本永久乱码免费播放片| 四虎在线观看视频高清无码| 国产在线观看人成激情视频| 日本一区中文字幕最新在线| 少妇高潮惨叫久久久久久| 视频国产精品丝袜第一页| 国产微拍精品| 国产成人精品高清不卡在线 | 色综合日本| 欧美日韩专区| 欧美性色综合网| 日韩麻豆小视频| 国产不卡国语在线| 中文字幕精品一区二区三区视频| 国产精品亚洲а∨天堂免下载| 久996视频精品免费观看| 99久久精品国产麻豆婷婷| 国产综合精品一区二区| 日韩精品一区二区三区大桥未久| 国产欧美视频在线| 中文字幕亚洲综久久2021| 特级精品毛片免费观看| 亚洲A∨无码精品午夜在线观看| 久久性妇女精品免费| 国产流白浆视频| 国产天天色| 成人亚洲天堂| 国产成人综合亚洲欧洲色就色| 综合色天天| 欧美日本二区| 91精品视频播放| 成人无码一区二区三区视频在线观看| 欧美成人影院亚洲综合图| 无码AV日韩一二三区| 色一情一乱一伦一区二区三区小说| 精品国产乱码久久久久久一区二区| 亚洲欧美日韩中文字幕在线一区| 在线观看国产精品日本不卡网| 亚洲一区二区三区在线视频| 欧美日韩一区二区在线播放| 中文字幕无码中文字幕有码在线| 992Tv视频国产精品| 永久天堂网Av| 无码精品国产dvd在线观看9久 | 色综合手机在线| 久久人人97超碰人人澡爱香蕉| 亚洲精品无码AV电影在线播放| 亚洲欧洲自拍拍偷午夜色无码| 中文字幕 91| 97se亚洲综合不卡| 国产00高中生在线播放| 午夜成人在线视频| 国产AV毛片| 久久精品嫩草研究院| 97视频精品全国在线观看| 久久毛片网| swag国产精品| 97超碰精品成人国产| AV无码无在线观看免费|