2013-06-21 55 views
0

這兩種方法有什麼區別嗎?修改後的方法參數與其在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; 
} 
+1

對我來說看起來是一樣的 - 除了短命和冗餘變量「m」 – DaveH

+0

的行爲?沒有 – nachokk

回答

3

不是從行爲角度來看,而且兩者都會顯示出同樣的效果。

從可讀性的角度來看,第二個是國際海事組織有點誤導,因爲有暗示什麼「有趣」發生,當沒有。

0

是否有這兩種方法有什麼區別?

他們做的事情完全一樣。 (儘管它們的寫法不同)。

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; 
} 

相反,你在m存儲新的參考model參數。我想你在談論有關深複製淺複製的概念的東西其中:

  • 深層複製意味着克隆的主要對象及其所有內引用(簡稱:創建每個相關對象的新實例)。
  • 淺拷貝意味着克隆的主要元素,保持其派生的元素的引用(如複製Car但是具有他的owner引用相同owner比原來Car)。

這裏,兩種方法都是一樣的。唯一的區別是額外的Model對象。

1

行爲是一樣的。

Model m = model; 

您正在創建一個與模型變量相同的局部變量。所以這不是一個副本。這是一個真正的參考變量副本。

mmodel指的是同一個對象在堆內存

所以,如果你改變M或模型例如用set methods

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

所以它不是對象本身的副本。它是參考變量的副本

相關問題