【发布时间】:2018-01-23 03:56:17
【问题描述】:
我正在浏览复制构造函数,我也浏览了堆栈溢出和其他链接中的链接。但我不清楚以下几点。
- 为什么我们需要复制构造函数
- 我们什么时候需要复制构造函数
我的意思是我们需要使用复制构造函数的确切情况或场景是什么。有人可以用示例解释或指出链接,以便我可以通过并清楚地理解它们。
以下是我通过链接了解什么是复制构造函数。
http://www.programmerinterview.com/index.php/java-questions/how-copy-constructors-work/
https://deepeshdarshan.wordpress.com/2013/12/05/copy-constructors-in-java/
第二个链接解释了“为什么”和“在哪里”使用复制构造函数。但我还是不清楚。
下面是我的类Employee.java
package com.test;
/**
* @author avinashd
*
*/
public class Employee {
private String rollNo;
private String name;
//constructor
public Employee(String rollNo, String name){
this.rollNo = rollNo;
this.name = name;
}
//copy constructor
public Employee(Employee employee){
this.rollNo = employee.rollNo;
this.name = employee.name;
}
public String getRollNo() {
return rollNo;
}
public void setRollNo(String rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
复制构造函数用于创建具有与现有对象相同值的对象的精确副本。
假设我们有一个员工,其值为rollNo: 1 和name: avinash。 Copy Constructor 将创建一个类似的对象,其值为 rollNo: 1 和 name: avinash 。但两者都是 2 个不同的对象,更改 on 对象的值不会影响另一个对象。
这里的问题是
当我们有一个构造函数比如
public Employee(String rollNo, String name){
this.rollNo = rollNo;
this.name = name;
}
创建一个对象。我们可以调用相同的构造函数来创建另一个对象。但是为什么我们需要调用复制构造函数。我们什么时候需要调用它呢?请解释
【问题讨论】:
-
如果你没有看到创建这样的构造函数的意义,那么你就不需要它。
-
不管怎样,上面示例中的复制构造函数尝试直接访问私有字段。它应该是
employee.getRollNo()而不是employee.rollNo和employee.getName()而不是employee.name。 -
1.我们没有。 2. 21 年的 Java 没用过。 3. Java 中真的没有“复制构造函数”这样的东西。复制构造函数是 C++ 编译器在按值传递或返回对象或分配对象时可以使用的东西。在 Java 中这些都不会发生。
标签: java copy-constructor