程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java的值傳遞、地址傳遞、引用傳遞

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

編輯:關於JAVA

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

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

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";  
    }   
      
}

大家思考下,這個例子輸出的結果應該是123呢還是234呢?結果是123。why?一句話表達:對象也是值傳遞,只是把這個對象的引用copy了一份。

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

1、name = "123"

2、調用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");  
    }   
      
}

那麼這段代碼輸出的結果應該是什麼呢?答案是123234,why?同樣分步分析:

1、name = "123"

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

3、改變所指向對象的值"123"+"234"

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved