Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Java中,修改过的方法参数和它的副本有什么区别?_Java_Variables_Methods_Parameters_Arguments - Fatal编程技术网

什么';在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”