私の関数は2つのDoubleオブジェクトを入力として受け取り、関数内で両方を変更したいと思います。それは不可能のようです。Javaはそれらを関数内にコピーしているようです。これはJavaでどのように行われ、C++では参照によって渡されます。
ありがとう
私の関数は2つのDoubleオブジェクトを入力として受け取り、関数内で両方を変更したいと思います。それは不可能のようです。Javaはそれらを関数内にコピーしているようです。これはJavaでどのように行われ、C++では参照によって渡されます。
ありがとう
ラッパークラスは不変であるため、変更できませんでした。1つの方法は、これら2つの属性を使用して1つのクラスを作成し、それを関数に渡し、関数内でそのオブジェクトに新しい値を設定することです。
できることは、Double
オブジェクトを Wrapper クラスにラップし、そのオブジェクトに格納されている double を変更することです。それ以外の場合は、変更する唯一の値はローカル引数であるため、他の方法はありません。
public class DoubleWrapper
{
private double d1, d2;
public void setter(double newdouble){}
public double getter() {}
}
double 値を配列で渡すと、関数内の配列要素を変更できます。
Java は値渡しなので、その通りです。別の方法で行う必要があります。
ここには 2 つの問題があります。
まず、Java のすべての値は値渡しです。これは、オブジェクト X が関数に送信されると、その関数が新しいバージョンの X を保持することを意味します。
第二に、値を変更することはできませんDouble
。を変更する必要があり、を実行してからにdouble
変換できます。Double d
double
d.doubleValue()
一般に、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 + "}"; }
}