3

我的函数将两个 Double 对象作为输入,我想在函数内部修改它们。似乎不可能,似乎java将它们复制到函数中。这是如何在java中完成的,在c ++中你通过引用传递。

谢谢

4

6 回答 6

11

包装类是不可变的,这就是您无法修改它们的原因。一种方法是,您可以创建一个具有这两个属性的类并将其传递给函数,在函数内部,为该对象设置新值。

于 2013-01-03T16:56:54.797 回答
3

您可以做的是将Double对象包装到 Wrapper 类中,并修改存储在该对象中的双精度值。否则,别无他法,因为您要更改的唯一值是本地参数。

public class DoubleWrapper
{
  private double d1, d2; 
  public void setter(double newdouble){} 
  public double getter() {}
}
于 2013-01-03T16:57:37.290 回答
2

传递数组中的双精度值,您可以修改函数中的数组元素。

于 2013-01-03T16:58:07.217 回答
0

这里有两个问题:

首先,Java 中的所有值都是按值传递的。这意味着,当一个对象 X 被发送到一个函数时,该函数拥有一个版本的 X。

其次,您不能修改Double值。您必须修改 a double,并且可以通过运行从 转换Double d为。doubled.doubleValue()

于 2013-01-03T16:58:52.503 回答
0

Java 是按值调用的,所以你是对的:它必须以另一种方式完成。

于 2013-01-03T16:57:33.780 回答
0

一般来说,您不应该修改 Java(或任何语言)中的参数

相反,我建议您将更改的值作为数组返回

public static double[] square(double... doubles) {
     double[] ret = new double[doubles.length];
     for(int i = 0; i < doubles.length; i++)
         ret[i] = doubles[i] * doubles[i];
     return ret;
}

理想情况下,你会有一个包装这些双打的类,然后你调用一个方法来改变它们

class MyDoubles {
     double d1, d2;

     public void squareDoubles() {
         d1 *= d1;
         d2 *= d2;
     }

     public String toString() { return "{ " + d1 +", " + d2 + "}"; }
}
于 2013-01-03T17:06:35.600 回答