ちょっと変わった質問です。次のコードは、DumObj という単純な Java オブジェクトを作成し、setter メソッドを使用して文字列値を設定するだけです。次に、DumObj をパラメーターとして使用して、TestBed クラスからいくつかのメソッドが呼び出されます。
最初は、TestBed.updateId(DumObj) を呼び出しても DumObj に影響はなく、「apple」に設定された ID の初期値は同じままであると考えていました。(値渡し全体のため)
ただし、ID の値は「オレンジ」の更新された値に設定されました。わかりました、それは変だと思ったので、別のメソッド TestBed.setToNull(DumObj) を書きました。このメソッドは DumObj を null に設定するだけなので、getId() メソッドを呼び出すと、null ポインター例外が発生することが予想されました。
しかし、私が得た出力は、ID の値がまだ「オレンジ」に設定されていました。
コードは次のとおりです。
public static void main(String[] args)
{
TestBed test = new TestBed();
DumObj one = new DumObj();
one.setId("apple");
System.out.println("Id : " + one.getId());
test.updateId(one);
System.out.println("Id : " + one.getId());
test.setToNull(one);
System.out.println("Id : " + one.getId());
}
public void updateId(DumObj two)
{
two.setId("orange");
}
public void setToNull(DumObj two)
{
two = null;
}
出力は次のとおりです。
Id : apple
Id : orange
Id : orange
おそらく私が見落としているのは本当に単純なことですが、誰かがこの動作を説明してもらえますか? Javaは値渡しではありませんか?