-1

我意识到这是一个常见问题,但在这里..

我试图写这个来弄清楚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);
    }
}

在这里,我可以更改传递给方法的对象内的基元的值,但不能更改传递给方法的基元的值。有什么原因吗。

4

2 回答 2

1

原始类型通过值传递,即在堆栈中复制,而对象通过指针的副本传递。

于 2014-02-26T23:53:11.513 回答
1

原始数据类型通过以下方式存储在变量中value

(几乎)其他所有内容都存储在reference关联对象的变量中

如果将它们传递给参数,则值始终为copied

因此原始数据类型copy the value和其他copy the reference相关对象。

(请注意,有像 String 这样的可憎之物,但几乎在所有情况下都如我所说)

于 2014-02-26T23:54:29.127 回答