3

私の関数は2つのDoubleオブジェクトを入力として受け取り、関数内で両方を変更したいと思います。それは不可能のようです。Javaはそれらを関数内にコピーしているようです。これはJavaでどのように行われ、C++では参照によって渡されます。

ありがとう

4

6 に答える 6

11

ラッパークラスは不変であるため、変更できませんでした。1つの方法は、これら2つの属性を使用して1つのクラスを作成し、それを関数に渡し、関数内でそのオブジェクトに新しい値を設定することです。

于 2013-01-03T16:56:54.797 に答える
3

できることは、Doubleオブジェクトを Wrapper クラスにラップし、そのオブジェクトに格納されている double を変更することです。それ以外の場合は、変更する唯一の値はローカル引数であるため、他の方法はありません。

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

double 値を配列で渡すと、関数内の配列要素を変更できます。

于 2013-01-03T16:58:07.217 に答える
0

Java は値渡しなので、その通りです。別の方法で行う必要があります。

于 2013-01-03T16:57:33.780 に答える
0

ここには 2 つの問題があります。

まず、Java のすべての値は値渡しです。これは、オブジェクト X が関数に送信されると、その関数が新しいバージョンの X を保持することを意味します。

第二に、値を変更することはできませんDouble。を変更する必要があり、を実行してからにdouble変換できます。Double ddoubled.doubleValue()

于 2013-01-03T16:58:52.503 に答える
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;
}

理想的には、これらの double をラップするクラスがあり、それらを変更するメソッドを呼び出します。

class MyDoubles {
     double d1, d2;

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

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