1. 程式人生 > 實用技巧 >深入瞭解java值傳遞

深入瞭解java值傳遞

深入瞭解java值傳遞

參考:

https://www.jb51.net/article/117083.htm

https://blog.csdn.net/qq_26542493/article/details/103898866

Java只有值傳遞

值傳遞-傳遞的是基本資料型別值(區分下午引用傳遞,稱“值”傳遞)

指在呼叫函式時,將實際引數複製一份傳遞給函式,這樣在函式中修改引數時,不會影響到實際引數。值傳遞是針對與基本資料型別來說的,一般的基本資料型別的變數和值是存在虛擬機器棧中的,在傳參的時候將棧中儲存的值複製一份傳遞到形參中。

值傳遞-傳遞物件型別的引用地址(又叫引用傳遞)

引用傳遞是針對與物件型別來說的,其實引用型別也是值傳遞,只不過傳遞的內容是一個引用地址。

注意我們口頭上常說的值傳遞是指白話文裡的:傳遞給形參的內容是個值。上面的“值”轉遞有點差別,和引用傳遞都是值傳遞,做區分也只是針對值的資料型別做的區分,本質上它們都是傳遞值。

public class ObjectTrans { 
    
  public static void main(String[] args) { 
    String name = "123"; 
    SChange(name);  // String是物件,傳遞的值是引用地址
    System.out.println(name); 
  } 
      
  public static 
void SChange (String str) { str = "234"; // String值不可變,所以重新開闢空間,str指向新的空間 } }

str賦值前:

str賦值後:

如果使用字串變數,不會開闢新的空間,name和str指向的還是同一塊空間。

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