0

これら2つの方法に違いはありますか?

public Long saveModel(Model model) {
    model.setUpdated(new Date());
    Long id = dao.save(model);
    return id;
}

public Long saveModel(Model model) {
    Model m = model;
    m.setUpdated(new Date());
    Long id = dao.save(m);
    return id;
}
4

4 に答える 4

1

ちょっとした説明です。あなたは実際にパラメータをコピーしていません:

public Long saveModel(Model model) {
    Model m = model; //Instance of the Model class that references the parameter
    m.setUpdated(new Date());
    Long id = dao.save(m);
    return id;
}

model代わりに、パラメータへの新しい参照を に格納していますmディープコピーシャローコピーの概念に関連する何かについて話していると思います:

  • ディープ コピーは、メイン オブジェクトとそのすべての内部参照を複製することを意味します (要するに、関連するすべてのオブジェクトに対して新しいインスタンスを作成します)。
  • 浅いコピーとは、メイン要素を複製し、その派生要素への参照を保持することを意味します ( a をコピーするが、元の要素と同じ参照Carを持つように)。ownerownerCar

ここでは、どちらの方法も同じことを行います。唯一の違いは、追加のModelオブジェクトです。

于 2013-06-21T16:53:34.043 に答える
1

動作は同じです。

 Model m = model; 

同様のモデル変数を参照するローカル変数を作成しています。だからコピーじゃない。本当に参照変数のコピーです。

mmodel ヒープメモリ内の同じオブジェクトを参照します

したがって、たとえば m またはモデルを変更すると、set methods

m.setUpdated(new Date());
model.getUpdated(); --> will get the date object you set above

したがって、オブジェクト自体のコピーではありません。参照変数のコピーです

于 2013-06-21T16:54:13.343 に答える