未调用复制构造函数,但默认构造函数称为java
我尝试了复制构造函数和克隆()来复制Room对象,但每次它都提供相同的对象,并且不复制。我发现它总是调用参数化构造函数。 我调用文件室副本构造函数的代码的一小部分:未调用复制构造函数,但默认构造函数称为java,java,constructor,copy,clone,Java,Constructor,Copy,Clone,我尝试了复制构造函数和克隆()来复制Room对象,但每次它都提供相同的对象,并且不复制。我发现它总是调用参数化构造函数。 我调用文件室副本构造函数的代码的一小部分: package primary; public class Room implements Cloneable{ int room_no; private int leftStrength; //number of students sitting on left side private int rig
package primary;
public class Room implements Cloneable{
int room_no;
private int leftStrength; //number of students sitting on left side
private int rightStrength;//number of students sitting on right side
private int capacity;
private int timeSlot;
private boolean checkBig;
boolean invigilanceRequired;
private int rightCapacity;
private int leftCapacity;
public Room(int room_no,int capacity)
{
this.room_no=room_no;
this.capacity=capacity;
rightStrength=0;
leftStrength=0;
timeSlot=0;
checkBig=true;
invigilanceRequired=true;
rightCapacity=capacity;
leftCapacity=capacity;
}
public Room(Room other)
{
this.room_no=other.room_no;
this.capacity=other.capacity;
this.rightStrength=other.rightStrength;
this.leftStrength=other.leftStrength;
this.timeSlot=other.timeSlot;
this.checkBig=other.checkBig;
this.invigilanceRequired=other.invigilanceRequired;
this.rightCapacity=other.rightCapacity;
this.leftCapacity=other.leftCapacity;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
当我打印上述两个对象save1和time1中的任何变量时,它们是不同的
我正在添加输入命令和输出
TimeInterval save1=new TimeInterval(time1);
输出:
旧时代1号,5号房间剩余容量60
旧时代2号,5号房间剩余容量60
旧时光2号,5号房间右力量0
旧时间1,房间5剩余容量0
旧时代2号,5号房间剩余容量60
旧时间2,5,时间1,右强度60,
< P> java没有复制的构造函数,与C++一样。 您已经创建了两个构造函数,一个获取房间号和容量,另一个从现有房间创建一个。您没有默认构造函数。此外,Java中没有自动使用“复制构造函数”。相反,如果您想要创建副本,那么您可以显式地调用您创建的房间(房间)构造函数来创建副本
问题是您希望使用“clone”方法调用Room(Room)构造函数吗?在这种情况下,如果需要,可以从“clone”方法内部调用它当你说他们不同时,你是什么意思?您是否正在打印地址并注意到它们是不同的物理对象?还是说应该相同的参数不相同?我已经解决了这个问题。我在所有构造函数中打印了一些内容,并逐行调试。我发现这个语句(TimeInterval save1=newtimeinterval(time1);)导致了这个问题。 我写下我在步骤中发现的内容:
您能更清楚地说明问题是什么,以及您是如何得出问题的结论的吗?我已经打印了save1和time1中的rightStrength变量。save1显示0。时间1显示60。它在循环中,因此time1随时间而更改,save1应将更改后的值复制到rightStrength。但实力仍然是0。因此,我得出结论,它正在调用参数化构造函数。如果
TimeInterval
上有一个rightstence
变量,您就没有显示它。请发表评论。向评论中添加代码格式不正确,请尝试编辑您的问题。(如果您同时提供所使用的打印语句以及您得到的结果和期望的结果,这将有所帮助。精确性有助于解决StackOverflow问题。)您的问题与默认构造函数无关。我已明确调用了Room copy构造函数。我已经提到了代码。for(Room:other.rooms){Room temproome=new Room(Room);this.rooms.add(temproome);}变量在这两个对象中有不同的值。您可能需要改写问题的标题。您的问题似乎与副本的字段是否更新有关?我仍然不能100%理解您的问题是什么,但我感觉到您的代码中的某个地方正在更新rightStrength值,但它没有按照您希望的方式进行更新?是的,它正在按照我希望的方式进行更新。但当我复制time1并将其保存到save1时。time1显示正确的更新值。但是save1显示了我在默认(参数化)构造函数中输入的值
TimeInterval save1=new TimeInterval(time1);
System.out.println("Old time 1,Room 5 capacity left "+save1.R4.getRightCapacity());
System.out.println("Old time 2,Room 5 capacity left "+save2.R4.getRightCapacity());
System.out.println("Old time 2,Room 5 right strength "+save2.R4.getRightStrength());
System.out.println("Old time 1,Room 5 capacity left "+time1.R4.getRightCapacity());
System.out.println("Old time 2,Room 5 capacity left "+time2.R4.getRightCapacity());
System.out.println("Old time 2,Room 5 time 1 right strength "+time1.R4.getRightStrength());