java - Hilfe: Analysieren Sie den folgenden Code im Detail, ich bin verwirrt.
阿神
阿神 2017-05-17 09:59:16
0
3
733

öffentliche Klasse T1 {

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

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

    System.out.println(aa);
}

}
Mein Verständnis:
aa in der Umbenennungsmethode befindet sich im Stapelspeicher und aa in der Hauptmethode befindet sich im Heapspeicher. Durch die Ausführung der Umbenennungsmethode wird der Wert von aa in der Hauptmethode nicht geändert. Stimmt das?

阿神
阿神

闭关修行中......

Antworte allen(3)
迷茫

按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。

按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

Java核心技术(I)提到,Java都是按值传递,首先对于基本类型,函数并不能修改它的值,对于引用类型,函数也不能修改使得其指向另一个对象。所以都是按值传递。

Ty80

不是吧,函数里头的aa指向了新的地址,外部的aa还是指向"BB"的地址,所以结果是BB

伊谢尔伦

函数传值,并没有把MAIN函数中的AA传进去,而是对AA的值做了一份拷贝,然后传递进去

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage