![](/img/trans.png)
[英]Java What is difference between generic method and a method object as a parameter?
[英]What's the difference between a modified method parameter and that of a copy of it in Java?
這兩種方法之間有什么區別嗎?
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;
}
從行為的角度來看,運行兩者將顯示出同樣多的效果。
從可讀性的角度來看,第二個是IMO有點誤導,因為這暗示着正在發生“有趣”的事情,而實際上卻沒有。
只需一點澄清。 您實際上並沒有復制參數:
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;
}
而是在m
存儲對model
參數的新引用。 我認為您在談論與深度復制和淺度復制的概念有關的內容,其中:
Car
但其owner
引用的owner
與原始Car
相同)。 在這里,兩種方法的作用相同。 唯一的區別是附加的Model
對象。
行為是相同的。
Model m = model;
您正在創建引用與模型變量相同的局部變量。 因此,它不是副本。 確實是參考變量副本。
m
和model
引用堆內存中的同一對象
因此,如果您使用set methods
更改m或模型
m.setUpdated(new Date());
model.getUpdated(); --> will get the date object you set above
因此,它不是對象本身的副本。 這是參考變量的副本
這兩種方法之間有什么區別嗎?
他們做的完全一樣。 (不過,它們的寫法有所不同。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.