java對象引用傳遞和值傳遞的一些總結


1.對象作為函數的參數傳遞過去的時候,是以原對象的引用的方式傳遞的,更改參數對象的值,會影響原來的對象。 2.對象作為函數的返回值的時候,傳遞過來的也是一個引用傳遞,更改傳遞過來的對象的時候,會影響原來的對象 3.對象A給另一個對象B賦值的時候(無論B是否經過了new 開辟新空間),此時的B是對A對象的一個引用,更改B會影響A 4.唯一的不是引用傳遞的方式是: 使用 基本數據類型賦值的方式,來對對象進行拷貝比如上例中的最后一種方式。這樣出現的對象是一個新對象,不是原始對象的引用 補充: 1. java中的String類型雖然也為一個對象,但是在賦值傳遞的時候,走的是值傳遞的路線,和一般數據類型是同樣的。String為一個特例。 總結: 對象的傳遞過程中, 基本上都是以引用傳遞來進行的,唯一的非引用傳遞的方法是: 自己開辟新的對象空間后,使用基本數據類型賦值方法(也可以自己實現一個copy復制函數)。

附上測試代碼和結果:

 

        String str = new String("abc");
        char[] ch = {'a','b','c'};

        Log.d("levin", str+"\n");    
        Log.d("levin", String.valueOf(ch));

        change(str,ch);
        
        System.out.print("\n");    
        Log.d("levin", str+"\n");    
        Log.d("levin", String.valueOf(ch));
        
        Person person  = new Person();
        person.name = "bill";
        person.age = 10;
        changePerson(person);
        Log.d("levin", person.name+"\n");    
        Log.d("levin", String.valueOf(person.age));
    public void changePerson(Person person){
        person.name = "Jobs";
        person.age = 50;
      }

 

 

06-07 12:33:57.178: D/levin(8091): abc 06-07 12:33:57.578: D/levin(8091): abc 06-07 12:33:58.548: D/levin(8091): abc 06-07 12:33:58.988: D/levin(8091): gbc 06-07 12:34:00.158: D/levin(8091): Jobs 06-07 12:34:00.418: D/levin(8091): 50


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM