什么';在Java中,修改过的方法参数和它的副本有什么区别?
这两种方法有什么区别吗什么';在Java中,修改过的方法参数和它的副本有什么区别?,java,variables,methods,parameters,arguments,Java,Variables,Methods,Parameters,Arguments,这两种方法有什么区别吗 public Long saveModel(Model model) { model.setUpdated(new Date()); Long id = dao.save(model); return id; } 及 这两种方法有什么区别吗 public Long saveModel(Model model) { model.setUpdated(new Date()); Long id = dao.save(model);
public Long saveModel(Model model) {
model.setUpdated(new Date());
Long id = dao.save(model);
return id;
}
及
这两种方法有什么区别吗
public Long saveModel(Model model) {
model.setUpdated(new Date());
Long id = dao.save(model);
return id;
}
他们做完全相同的事情。(不过,它们的书写方式不同。)
这两种方法有什么区别吗
public Long saveModel(Model model) {
model.setUpdated(new Date());
Long id = dao.save(model);
return id;
}
他们做完全相同的事情。(不过,它们的书写方式不同。)不是从行为的角度来看的,同时运行这两种方法也会显示出同样的效果
从可读性的角度来看,第二个有点误导,因为这意味着一些“有趣”的事情正在发生,而实际上并没有发生。不是从行为的角度来看,运行这两个选项也会显示出同样的效果
从可读性的角度来看,第二个问题在我看来有点误导,因为这意味着一些“有趣”的事情正在发生,而实际上并没有发生。只是一个小小的澄清。您实际上没有复制参数:
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
参数的新引用。我想你说的是与深度复制和浅层复制相关的概念,其中:
- 深度复制意味着克隆主对象及其所有内部引用(简而言之:为每个涉及的对象创建新实例)
- 浅复制意味着克隆主元素,保留对其派生元素的引用(例如复制
,但让其汽车
引用与原始所有者
相同的汽车
)所有者
在这里,两种方法都是一样的。唯一的区别是附加的
模型
对象。只是一个小小的澄清。您实际上没有复制参数:
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
参数的新引用。我想你说的是与深度复制和浅层复制相关的概念,其中:
- 深度复制意味着克隆主对象及其所有内部引用(简而言之:为每个涉及的对象创建新实例)
- 浅复制意味着克隆主元素,保留对其派生元素的引用(例如复制
,但让其汽车
引用与原始所有者
相同的汽车
)所有者
模型
对象。行为是相同的
Model m = model;
您正在创建一个局部变量,该局部变量引用相同的like模型变量。所以它不是复制品。它实际上是一个引用变量副本
m
和model
引用堆内存中的同一对象
因此,如果您更改m或模型,例如使用set方法
m.setUpdated(new Date());
model.getUpdated(); --> will get the date object you set above
所以它不是对象本身的副本。它是参考变量的副本行为相同
Model m = model;
您正在创建一个局部变量,该局部变量引用相同的like模型变量。所以它不是复制品。它实际上是一个引用变量副本
m
和model
引用堆内存中的同一对象
因此,如果您更改m或模型,例如使用set方法
m.setUpdated(new Date());
model.getUpdated(); --> will get the date object you set above
所以它不是对象本身的副本。它是参考变量的副本在我看来相同-除了短期和冗余变量“m”在我看来相同-除了短期和冗余变量“m”