Java值傳遞以及引用的傳遞、數(shù)組的傳遞_第1頁
Java值傳遞以及引用的傳遞、數(shù)組的傳遞_第2頁
Java值傳遞以及引用的傳遞、數(shù)組的傳遞_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Java值傳遞以及引用的傳遞、數(shù)組的傳遞?。≡S多編程語言都有2種方法將參數(shù)傳遞給方法----按值傳遞和按引用傳遞。與其他語言不同,Java不允許程序員選擇按值傳遞還是按引用傳遞各個(gè)參數(shù),基本tsa類型(byte--short--int--long--float--double--boolea的變量總)是按值傳遞。就對象而言,不是將對象本身傳遞給方法,而是將對象的的引用或者說對象的首地址傳遞給方法,引用本身是按值傳遞的是說,講引用的副本傳遞給方法(副本就是說明對象此時(shí)有兩個(gè)引用了),通過對象的引用,方法可以直接操作該對象(當(dāng)操作該對象時(shí)才能改變該對象,而操作引用時(shí)源對象是沒有改變的)。tsa現(xiàn)在說說數(shù)組:如果將單個(gè)基本類型數(shù)組的元素傳遞給方法,并在方法中對其進(jìn)行修改,則在被調(diào)用方法結(jié)束執(zhí)行時(shí),該元素中存儲(chǔ)的并不是修改后的值,因?yàn)檫@種元素是按值傳遞,如果傳遞的是數(shù)組的引用,則對數(shù)組元素的后續(xù)修改可以在原始數(shù)組中反映出來(因?yàn)閿?shù)組本身就是個(gè)對象,int[]a=newint[這里面的^七是數(shù)組元素的類型,而數(shù)組元素的修改是操作對象)。對于單個(gè)非基本類型數(shù)組的元素在方法中修改,則在被調(diào)用方法結(jié)束執(zhí)行時(shí),該元素中存儲(chǔ)的是修改后的值,因?yàn)檫@種元素是按引用傳遞的,對象的改動(dòng)將在源數(shù)組的數(shù)組元素中反映出來。卜面看個(gè)小程序:publicclassTest(2.3.Stringstr=newString(〃good〃);char[]ch=('a','b','c'};inti=10;publicvoidchange(Stringstr,char[]ch,inti)(7.3.str="testok”;ch[0]='g';i++;}12.publicstaticvoidmain(String[]args)(14.Testtt=newTest();tt.change(tt.str,tt.ch,tt.i);System.out.println(tt.i);System.out.print(tt.str+"and");System.out.println(tt.ch);}}str是String類型的引用,i是基本類型變量,ch是數(shù)組名,也是數(shù)組對象的引用在chang()方法里,str="testok",是一個(gè)新的對象把首地址放在引用變量str上;而ch[0]='g';因?yàn)閭鞯氖菙?shù)組的引用,而此時(shí)ch[0]='g';是對數(shù)組元素的操作,能修改源數(shù)組的內(nèi)容;i是整型值,只是把值copy了一份給方法,在方法的變化是不改變的源i的。所以結(jié)果是:10goodandgbc現(xiàn)在咱們把代碼變化一下:publicclassTest(2.Stringstr=newString("good");char[]ch={'a','b','c'};inti=10;publicvoidchange(Stringstr,charch,inti)(7.str="testok";ch='g';this.i=i+1;}12.publicstaticvoidmain(String[]args)(14.Testtt=newTest();tt.change(tt.str,tt.ch[0],tt.i);System.out.println(tt.i);TOC\o"1-5"\h\zSystem.out.print(tt.str+"and");System.out.println(tt.ch);}}仔細(xì)觀察下實(shí)參以及入?yún)⒂泻巫兓??change()方法里的入?yún)har[]ch變成charch;這次傳遞的是個(gè)char值的單個(gè)數(shù)組元素,按照上面的解析,此時(shí)ch='9'是不影響源數(shù)組元素的。this.i=i+1;這里面等號左邊的i是屬性i,等號右邊的i是局部變量(入?yún)⒗锏膇);此時(shí)i+1后賦值給屬性的1,自然會(huì)改變屬性i的值,同時(shí)17行,tt.i又是調(diào)用屬性的i,這次的結(jié)果是:11goodandabc現(xiàn)在是不是有點(diǎn)明白了?那好再看下面一個(gè)小程序publicclassTest(2.publicvoidchange(StringBufferx,StringBuffery)(4.x.append(y);y=x;}publicstaticvoidmain(String[]args)(9.StringBufferbuffA=newStringBuffer("a");StringBufferbuffB=newStringBuffer("b");newTest().change(buffA,buffB);System.out.println(buffA+","+buffB);}}這次傳遞的是兩個(gè)對象的引用的值,在方法change()里的x.append(y),其中引用x調(diào)用api方法append()修改了newStringBuffer("a");的內(nèi)容。y=x;是一個(gè)修改內(nèi)容的對象把首地址賦值給引用變量y了,此時(shí)操作的是引用,而先前y是newStringBuffer("b");的引用變量,所以輸出結(jié)果是:ab,b下面是個(gè)稍難的小程序,先自己用筆畫畫過程,寫出自己的結(jié)果,而后再上機(jī)操作下,如果自己的結(jié)果和在電腦上的結(jié)果一樣,那么再碰到這類題就不難了,如果不一樣,回頭仔細(xì)體會(huì)下我前面的講解,找找原因。publicclassTest(2.privateStringnn=newString("1");privateString[]mm=("2","5"};5.voidtest(Stringnn,String[]mm)(7.nn=newString("3”);this.nn="9";10.mm[0]="4";System.out.println("intest(),mm[0]:"+mm[0]);mm=newString[]("8","7"};System.out.println("intest(),nn:"+nn);System.out.println("this.nn:"+this.nn);System.out.println

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論