首頁  >  問答  >  主體

java - 求救:詳細分析以下這段程式碼,搞糊塗了

public class T1 {

public static void rename(String aa){
    
    aa="AA";
    
}

public static void main(String args[ ]){
    
    String aa="BB";
    
    rename(aa);

    System.out.println(aa);
}

}
我的理解:
rename方法中的aa是在堆疊記憶體中,main方法中的aa是在堆疊記憶體中的,執行rename方法是不會修改main方法中的aa的值,是這樣嗎?

阿神阿神2685 天前658

全部回覆(3)我來回復

  • 迷茫

    迷茫2017-05-17 10:01:16

    以值傳遞(call by value)是最常用的求值策略:函數的形參是被呼叫時所傳實參的副本。修改形參的值並不會影響實參。

    按引用傳遞(call by reference)時,函數的形參接收實參的隱式引用,而不再是副本。這意味著函數形參的值如果被修改,實參也會被修改。同時兩者指向相同的值。

    Java核心技術(I)提到,Java都是以值傳遞,首先對於基本類型,函數並不能修改它的值,對於引用類型,函數也不能修改使得其指向另一個物件。所以都是按值傳遞。

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-17 10:01:16

    不是吧,函數裡頭的aa指向了新的地址,外部的aa還是指向"BB"的地址,所以結果是BB

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-17 10:01:16

    函數傳值,並沒有把MAIN函數中的AA傳進去,而是對AA的值做了一份拷貝,然後傳遞進去

    回覆
    0
  • 取消回覆