我知道这是一个常见的问题,但这里是..
我试图写这个来弄清楚Java如何处理参数传递等等。
public class CallByValue {
int key;
public void changeValue(CallByValue c){
System.out.println(c);
c.key=7;
}
public void changeValue(int x){
x=0;
}
public static void main(String[] args){
CallByValue c=new CallByValue();
c.key=5;
System.out.println(c);
c.changeValue(c);
System.out.println(c.key);
int x=8;
c.changeValue(x);
System.out.println(x);
}
}
在这里,我可以更改传递给方法的对象中的基元的值,但我不能更改传递给方法的基元的值。有没有原因。
基元类型按值传递,该值在堆栈中复制,而对象通过指针副本传递。
基元数据按value
存储在变量中
(几乎)其他所有内容都存储在变量中,reference
关联对象
如果将它们传递到参数中,则值始终copied
。
因此,基元数据类型copy the value
和其他copy the reference
关联对象。
(请注意,有像 String 这样的可憎之物,但几乎所有情况下都是我说的)