gpt4 book ai didi

java - 复制构造函数中的这段代码有什么问题?

转载 作者:行者123 更新时间:2023-12-01 16:53:26 26 4
gpt4 key购买 nike

数字类

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);
}
}

为什么以及解决方案是什么?

最佳答案

您的复制构造函数不会创建原始类的数组成员的副本。

您需要复印:

Number(Number O)
{
this.n = O.n;
this.arr = Arrays.copyOf(O.arr,O.arr.length);
}

当您仅复制对原始数组的引用时,两个 Number 实例都引用同一个数组,并且其中一个实例的数组中的更改会反射(reflect)在另一个实例中。

关于java - 复制构造函数中的这段代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36061639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com