在JAVA中通过ref,double和Double传递参数

时间:2013-12-12 15:20:14

标签: java parameters pass-by-reference primitive-types

如果有人可以帮我理解以下问题:

据我所知,double是Java中的原始数据类型,Double是不可变类。 每个参数都按值传递。如果它是原始类型(intdoublebyte),那么它是传递的实际值;如果它是一个对象类型,那么它就是该对象的地址被复制。

如果是这样,为什么不更改Double类型的参数?

...
    public static void main(String[] args) {
        Double value = new Double(0);

        SomeObj so = new SomeObj();
        so.setNewValue(value);

        System.out.println(value);
    }
...

public class SomeObj {
    public void setNewValue(Double changeMe)
    {
        changeMe = new Double(10.0);
    }
}

1 个答案:

答案 0 :(得分:6)

通过值传递的对象的引用。 在setNewValue方法中,您更改了引用,因此changeMe变量指向其他内容。 <{1}}方法中对原始value对象的(引用)不会改变。

另见Is Java "pass-by-reference" or "pass-by-value"?