java中對象作為參數傳遞給一個方法,到底是值傳遞,還是引用傳遞


java只有按值傳遞:基本類型  值傳遞;引用類型,地址值傳遞,所以叫值傳遞。 

基本類型:傳遞的是值的拷貝,也就是說傳遞后就互不相關了,也就是說,不過副函數的副本如何變化,主本永遠不會被影響。 

引用類型:傳遞的是引用地址值,有可能會被影響。 (如下)

    如果是對象的話,就是將引用的值復制一份給方法當參數。如果是根據引用把堆里的對象修改了,那么對象真被修改了,

  不過不是被創建賦值給的那個引用修改的,是方法里的一個復制的引用副本給修改的。

String:具有不可變。是特殊的引用類型,其作用跟基本類型一樣,傳遞后不相關。 

例:

public class StudySetAndGet {                                        
    public static void main(String[] args) {                         
        Person person=new Person();                                  
        String bob="Bob";                                            
        person.setName(bob);                                         
        System.out.println(bob.hashCode());                          
        System.out.println(person.getName());                        
        bob="Alice";
     //String:具有不可變。是特殊的引用類型,其作用跟基本類型一樣,傳遞后不相關。  System.out.println(bob.hashCode()); System.out.println(person.getName()); String[] fullname
=new String[]{"Homer","Simpson"}; person.setFullName(fullname); System.out.println(fullname.hashCode()); System.out.println(person.getFullName()); fullname[0]="Bart"; //傳入的是地址。所以改變內部的值,下面也會跟着改變(hashCode值不變) System.out.println(fullname.hashCode()); System.out.println(person.getFullName()); } } class Person{ private String name; private String[] fullName; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFullName() { return this.fullName[0]+" "+this.fullName[1]; } public void setFullName(String[] fullName) { this.fullName = fullName; } }

 


免責聲明!

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



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