数字等级
class Number
{
Scanner input = new Scanner(System.in);
int[] arr;
int n;
String name;
Number()
{
System.out.print("Enter List Size :");
this.n = input.nextInt();
this.arr = new int[n];
for(int i =0;i<n;i++)
{
System.out.print("Enter a Number :");
this.arr[i] = input.nextInt();
}
}
Number(Number O)
{
this.n = O.n;
this.arr = O.arr;
}
void Read_Number()
{
for(int i =0;i<n;i++)
{
System.out.print("Enter a Number :");
arr[i] = input.nextInt();
}
}}
创建复制构造函数后,如果我在对象O2中进行了更改,那么在对象O1中也会发生类似的更改。
public class MyList {
public static void main(String[] args)
{ Scanner input = new Scanner(System.in);
Number O1 = new Number();
Number O2 = new Number(O1);
}
}
为什么和什么是解决方案?
答案 0 :(得分:3)
您的复制构造函数不会创建原始类的数组成员的副本。
你需要复制一份:
Number(Number O)
{
this.n = O.n;
this.arr = Arrays.copyOf(O.arr,O.arr.length);
}
当您只复制对原始数组的引用时,两个Number
实例引用同一个数组,其中一个实例的数组中的更改将反映在另一个实例中。
答案 1 :(得分:2)
int []是参考数据类型。如果将其复制到新对象,则复制引用,而不是它指向的对象。这将解决您的问题:
Number(Number O)
{
this.n = O.n;
this.arr = Arrays.copyOf(O.arr, O.arr.length);
}