String是類似值傳遞String數(shù)組是引用傳遞_第1頁
String是類似值傳遞String數(shù)組是引用傳遞_第2頁
String是類似值傳遞String數(shù)組是引用傳遞_第3頁
String是類似值傳遞String數(shù)組是引用傳遞_第4頁
String是類似值傳遞String數(shù)組是引用傳遞_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、首先、我們必須牢記的一點是:java語言規(guī)范規(guī)定,String型變量指向的內(nèi)存空間中的內(nèi)容是不能被改變的,即String是不可改變的類!示例一:public class TestConstant public static void main(String args) String str=new String("hello"); str="Welcome to Here" 解析:毋庸置疑,此程序輸出的將是“Welcome to Here”,但是給str重新賦值的操作(str="Welcome to Here"),不是簡單的將str指

2、向的原內(nèi)存地址內(nèi)容改為"Welcome to Here",而是從新分配一塊內(nèi)存用來存放"Welcome to Here",然后將str指向該新分配的內(nèi)存地址。而原來的"hello"如果沒有其他String變量指向它,那么他將被java的垃圾收集器回收;如果有其他的String變量指向它,它將在內(nèi)存繼續(xù)存在,比如:示例二:public class TestConstant public static void main(String args) String str=new String("hello"); Stri

3、ng str1=str; str="123" 解析:上面的程序會先后輸出123和hello,由于str1仍然指向hello,所以hello所在內(nèi)存沒有被回收。一、普通的類對象作為函數(shù)參數(shù)是引用傳遞示例三:class Common private int a; public Common(int a) this.a=a; public void setA(int a) this.a=a; public void disp() public class TestCommon public static void main(String args) Common c=new Co

4、mmon(1); set(c,3); c.disp(); public static void set(Common c,int a) c.setA(a); 解析:引用傳遞的特點是,對象引用作為參數(shù)傳遞的是地址(相當于C語言中的指針),在調(diào)用函數(shù)中對引用的改變會反映到該引用對應(yīng)的地址上。所以本例中在執(zhí)行完set(c,3)后,c的屬性a變成了3。大家應(yīng)該都很熟悉,不在贅述。二、String變量作為函數(shù)參數(shù)是"類似值傳遞"public class TestString public static void main(String args) String strTest=new

5、 String("ab"); /String strTest="ab"這兩種形式的定義,輸出的都是ab setString(strTest); private static void setString(String str) str=str+"c" 解析:對于java初學者來說,很多人在執(zhí)行程序以前一定認為輸出的將會是"abc”,但是結(jié)果告訴我們輸出的會是"ab",這就是String的“類似值傳遞”(即可以將String看做int,double等基本類型,這些基本類型作為參數(shù)是值傳遞,但String在j

6、ava規(guī)范中又不是基本類型,所以此處稱其為“類似值傳遞”)。在java中是將String看做引用類型的,既然如此,那此處到底是不是引用傳遞呢?可以明確的告訴大家,這里絕對是引用傳遞。那既然是引用傳遞,為什么卻時值傳遞的效果呢?答案其實已經(jīng)在開篇告訴大家了:java語言規(guī)范規(guī)定,String型變量指向的內(nèi)存空間中的內(nèi)容是不能被改變的。下面來詳細解析一下,當我們剛開始調(diào)用setString()函數(shù)的時候,strTest和str同時指向了"ab”所在的內(nèi)存單元,然后在setString()中試圖改變str的值,根據(jù)String的不可改變性,此時系統(tǒng)會分配新的內(nèi)存并令str指向該內(nèi)存,該內(nèi)存

7、的內(nèi)容為abc;而對于strTest他仍然指向原來的內(nèi)存單元-即ab所在的內(nèi)存單元,此處和示例二的道理相同。到這里讀者應(yīng)該明白原因了吧,其實仍然是引用傳遞,只不過由于String的不可變的性質(zhì),導(dǎo)致String變量作為參數(shù)的特殊性。 三、String數(shù)組作為變量作為函數(shù)參數(shù)是引用傳遞(即和一般普通類的引用傳遞相同)public class TestArray public static void main(String args) Change chge = new Change(); String str1 = new String("hello"),new String

8、("world"); String str2 = new String("hello"); chge.change(str1,str2); class Change public static void change(String s1,String s2) s10 = new String("change"); s2="change" 解析:程序輸出的結(jié)果將是change和hello,對于為什么輸出hello前面已經(jīng)解釋過了,現(xiàn)在解釋一下String數(shù)組作為參數(shù)為什么可以改變其值。大家來看String數(shù)組str1,數(shù)組元素保存的是String對象的引用,不是String對象本身的內(nèi)容,那么數(shù)組元素就相當于一個指向指針的指針。當程序執(zhí)行s10 = new String

溫馨提示

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

最新文檔

評論

0/150

提交評論