クラス型をメソッドのパラメータとして渡すと、ポインタが渡されます。メソッドのパラメータを編集すると、渡された元のオブジェクトインスタンスも編集されます例public void changeColor(Color color)
という名前のメソッドは、次のコードない場合:クラス型パラメータ渡しのJavaプリミティブ
public void changeColor(Color color)
{
color = new Color(20, 100, 50);
}
を、あなたはそうのような値と呼ば:
Color color = new Color(10, 20, 30);
System.out.println(color.toString());
changeColor(color);
System.out.println(color.toString());
コンソールの両方の行が(java.awt.Color[r=10,g=20,b=30]
とjava.awt.Color[r=20,g=100,b=50]
)異なっている必要があり、これVA lueが変更され、ポインタが渡されます。一方、あなたは原始的であるint型の値を、使用している場合、あなたは異なる結果を得る:
public void changeNumber(int i)
{
i = 10;
}
をし、そのようにあなたは、値と呼ば:
int n = 5;
System.out.println(n);
changeNumber(n);
System.out.println(n);
コンソールが5
を印刷しません。 10
ですが、両方の行には5
と表示されています。ことで、私が持っていた場合は、この:
public class A
{
public int i;
public Color c;
public A(int n, Color color)
{
i = n;
c = color;
}
}
そして実行可能なクラスの
...public static void main(String[] args)
{
A a = new A(10, new Color(10, 40, 23));
changeA(a);
}
public static changeA(A varA)
{
varA.i = 54;
varA.c = new Color(40, 30, 264)
}
ウィル私の内側それはAのポインタの一部であるかのように、クラスでも動作しますかchangeA(a)を実行した後、メインメソッドのaiが変更されない場合の値。もしそうでなければ、私は何をして変化するのでしょうか?
ここから始める:http://stackoverflow.com/questions/8263446/how-to-verify-call-by-value-of-java –
これは間違っています。 'changeColor()'に渡される 'color'オブジェクトは変更されません。実際にコードを実行しましたか? Javaは参照によって値を渡します。つまり、あるメソッドが、呼び出し元の参照が新しいものを指すようにすることはできません。 – erickson