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

1.對象做爲函數的參數傳遞過去的時候,是以原對象的引用的方式傳遞的,更改參數對象的值,會影響原來的對象。 2.對象做爲函數的返回值的時候,傳遞過來的也是一個引用傳遞,更改傳遞過來的對象的時候,會影響原來的對象 3.對象A給另外一個對象B賦值的時候(不管B是否通過了new 開闢新空間),此時的B是對A對象的一個引用,更改B會影響A 4.惟一的不是引用傳遞的方式是: 使用 基本數據類型賦值的方式,來對對象進行拷貝好比上例中的最後一種方式。這樣出現的對象是一個新對象,不是原始對象的引用 補充: 1. java中的String類型雖然也爲一個對象,可是在賦值傳遞的時候,走的是值傳遞的路線,和通常數據類型是一樣的。String爲一個特例。 總結: 對象的傳遞過程當中, 基本上都是以引用傳遞來進行的,惟一的非引用傳遞的方法是: 本身開闢新的對象空間後,使用基本數據類型賦值方法(也能夠本身實現一個copy複製函數)。java

附上測試代碼和結果:函數

 

        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測試

相關文章
相關標籤/搜索