java - 我需要复制卡片数组,但只给出了我需要复制的数组的地址

标签 java arrays eclipse

我需要制作一个我无法直接访问的卡片数组的临时副本,因为它位于另一个名为 Hand 的类中。我得到了一个名为 getHand() 的方法,它返回对我需要在类 RummyHand 中复制的数组的引用,该类是 Hand 的子类。变量 rummyHand 是 RummyHand 类中的实例变量,并且是 Hand 对象。如果这很重要的话,我也在 E​​clipse 中工作。

但这两个都不是:

Card[] temp = new Card[8];

temp = rummyHand.getHand();

或者这个:

Card[] temp = rummyHand.getHand();

已经像我想象的那样复制了数组。

最佳答案

您可以使用Arrays.copyOfSystem.arrayCopy复制数组,或者更简单地,clone():

Card[] temp = rummyHand.getHand().clone();

请注意,使用 = 运算符绝不会复制任何数据。 = 所做的只是使变量引用不同的事物。理解这一点很重要,否则会给您带来很多麻烦。

详细信息(希望有用):

new Card[8];

创建一个数组:一个足够大的新内存区域,可以容纳指向 8 张卡片的指针。

Card[] temp

创建一个必须指向某种卡片数组的变量。

=
中间的

使变量指向该内存区域。表达式

rummyHand.getHand();

为您提供不同内存区域的地址。所以这条线

temp = rummyHand.getHand();

只是让 temp 变量指向该内存区域。 copyOfarrayCopyclone 的工作原理都是创建一个新数组并用原始数组中的引用填充它,然后将新数组返回给您数组。

关于java - 我需要复制卡片数组,但只给出了我需要复制的数组的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801919/

相关文章:

c++ - 为什么我的插入排序函数不会更改我从 int main 传递的数组?

java - 如何验证来自 SWT 文本小部件的输入并分配给变量?

Java 使用 "extends"和范围分辨率/"dot"运算符?

将项目添加到数组时出现 Java 异常

java - 在 JBoss 中通过 XSLT 调用 Java 函数会抛出转换器异常(在 tomcat 中有效)

php - 获取通知系统数组中的名称

Eclipse 创建 git 仓库失败

java - 组合框未显示

java - 处理多个按钮的 android onclick(总共 81 个)

java - 从孙类调用父类构造函数,调用父类或祖父类构造函数?