我需要制作一个我无法直接访问的卡片数组的临时副本,因为它位于另一个名为 Hand 的类中。我得到了一个名为 getHand() 的方法,它返回对我需要在类 RummyHand 中复制的数组的引用,该类是 Hand 的子类。变量 rummyHand 是 RummyHand 类中的实例变量,并且是 Hand 对象。如果这很重要的话,我也在 Eclipse 中工作。
但这两个都不是:
Card[] temp = new Card[8];
temp = rummyHand.getHand();
或者这个:
Card[] temp = rummyHand.getHand();
已经像我想象的那样复制了数组。
最佳答案
您可以使用Arrays.copyOf或System.arrayCopy复制数组,或者更简单地,clone():
Card[] temp = rummyHand.getHand().clone();
请注意,使用 =
运算符绝不会复制任何数据。 =
所做的只是使变量引用不同的事物。理解这一点很重要,否则会给您带来很多麻烦。
详细信息(希望有用):
new Card[8];
创建一个数组:一个足够大的新内存区域,可以容纳指向 8 张卡片的指针。
Card[] temp
创建一个必须指向某种卡片数组的变量。
=
中间的 使变量指向该内存区域。表达式
rummyHand.getHand();
为您提供不同内存区域的地址。所以这条线
temp = rummyHand.getHand();
只是让 temp
变量指向该内存区域。 copyOf
、arrayCopy
和 clone
的工作原理都是创建一个新数组并用原始数组中的引用填充它,然后将新数组返回给您数组。
关于java - 我需要复制卡片数组,但只给出了我需要复制的数组的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801919/