詳解java的值傳遞、地址傳遞、引用傳遞

詳解java的值傳遞、地址傳遞、引用傳遞

十余年建站經(jīng)驗(yàn), 成都網(wǎng)站制作、網(wǎng)站建設(shè)客戶的見證與正確選擇。成都創(chuàng)新互聯(lián)公司提供完善的營(yíng)銷型網(wǎng)頁建站明細(xì)報(bào)價(jià)表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。

一直來覺得對(duì)值傳遞和地址傳遞了解的很清楚,剛才在開源中國(guó)上看到一篇帖子介紹了java中的值傳遞和地址傳遞,看完后感受頗深。下邊總結(jié)下以便更容易理解。

按照以前的理解,java中基本數(shù)據(jù)類型是值傳遞,對(duì)象是地址(引用)傳遞。給大家看個(gè)例子:

public class ObjectTrans { 
   
  public static void main(String[] args) { 
    String name = "123"; 
    SChange(name); 
    System.out.println(name); 
  } 
     
  public static void SChange (String str) {   
    str = "234"; 
  }  
   
}

大家思考下,這個(gè)例子輸出的結(jié)果應(yīng)該是123呢還是234呢?結(jié)果是123。why?一句話表達(dá):對(duì)象也是值傳遞,只是把這個(gè)對(duì)象的引用copy了一份。

其實(shí)java本來就是值傳遞,沒有c++那樣的指針傳遞,分步分析下上邊的代碼:

1、name = "123"

2、調(diào)用SChange  str 和 name 共同指向 “123”(拷貝name的引用賦給str)

3、str 重新賦值并指向“234”

4、name指向不變還是“123”

下邊看另外一段代碼:

public class ObjectTrans { 
   
  public static void main(String[] args) { 
    StringBuilder name = new StringBuilder("123"); 
    SChange(name); 
    System.out.println(name); 
  } 
     
  public static void SChange (StringBuilder str) {   
    //str = "234"; 
    str.append("234"); 
  }  
   
}

那么這段代碼輸出的結(jié)果應(yīng)該是什么呢?答案是123234,why?同樣分步分析:

1、name = "123"

2、調(diào)用SChange  str 和 name 共同指向 “123”(拷貝name的引用賦給str)

3、改變所指向?qū)ο蟮闹?123"+"234"

4、引用沒變只是值變了,所以結(jié)果為123234

如果不明白請(qǐng)留言,自己好好分析下。。。請(qǐng)記住一句話:java只有值傳遞。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

新聞標(biāo)題:詳解java的值傳遞、地址傳遞、引用傳遞
本文鏈接:http://muchs.cn/article28/jsogjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、定制網(wǎng)站、Google、做網(wǎng)站、用戶體驗(yàn)移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)