【问题标题】:Passing parametars by ref, double and Double in JAVA在 JAVA 中通过 ref、double 和 Double 传递参数
【发布时间】:2013-12-31 02:07:43
【问题描述】:

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

据我了解,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);
    }
}

【问题讨论】:

  • “如果是对象类型” 关键是没有“对象类型”这样的东西。 Java 中唯一的类型是原始类型和引用类型。

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


【解决方案1】:

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

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

【讨论】:

  • 值得一提的是,能够更改引用的唯一方法是传递一个数组或将类型封装在一个新类中。
  • 天哪!当您陷入自己的思想世界时的感觉。我一开始没看懂你写的什么。谢谢!布鲁诺·科斯塔(Bruno Costa)我现在谈到这一点,也谢谢你!只是补充一下,如果 Double 是可变的,我可以使用 main 方法之外的 setter 来更改它,并且更改将反映..
猜你喜欢
  • 1970-01-01
  • 2020-06-08
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多