Java 使用对象数组

Java 使用对象数组,java,arrays,object,Java,Arrays,Object,@编辑它的作品,谢谢你的答案:)我想我的坏是当我认为 WORLD[i]=global.Values.CHUNKPATTERN(); 只需在右侧获取对象,克隆其值,并将其分配给左侧的零件,而实际上它在两个零件之间建立了一个引用。再次感谢:) 我有一个简单的begginer/新手数组问题: for(int i=0; i<global.Values.WORLDVOLUME(); i++) // global.Values.WORLDVOLUME() --> const, int. a

@编辑它的作品,谢谢你的答案:)我想我的坏是当我认为

WORLD[i]=global.Values.CHUNKPATTERN();
只需在右侧获取对象,克隆其值,并将其分配给左侧的零件,而实际上它在两个零件之间建立了一个引用。再次感谢:)

我有一个简单的begginer/新手数组问题:

for(int i=0; i<global.Values.WORLDVOLUME(); i++)  
// global.Values.WORLDVOLUME() --> const, int. always the same.
{
WORLD[i]=global.Values.CHUNKPATTERN(); //to pre-define as 'zero only' object. Always the same. Const.
WORLD[i].chunknr=i+1;
}

System.out.println(WORLD[4].chunknr);
对吧??
如何通过循环分配?

我猜下面的行返回的总是相同的引用:

global.Values.CHUNKPATTERN();
所以不同的数组索引实际上指向同一个引用。这只是一个猜测,因为您没有告诉我们上述函数是如何工作的

下面是一个不同数组元素可以指向同一Instance的示例:

public class AClass{ 
  public int val = 0;

 }
AClass[] array = new AClass[2];
AClass classInstance = new AClass();
array[0] = classInstance;
array[1] = classInstance;
上面的代码只安装了一个AClass对象(classInstance),但使用了两个不同的数组元素来引用同一个实例:

System.out.println("array 1 value " + array[1].val ); // both element initialized to 0 so it prints 0
array[0].val = 15; // actually is classInstance.val to be modified, through the reference to it stored inside the first element of the array. 
System.out.println("array 1 value " + array[1].val ); // print 15
对于点示例的关注点,可以通过以下方式使用For循环:

Point POINTARRAY[]= new Point[10];
for(int i = 0 ; i < POINTARRAY.length; ++i)
{
  POINTARRAY[1].x=...;
  POINTARRAY[1].y=...;

}
POINTARRAY[]=新点[10];
对于(int i=0;i
而是
WORLD[i].chunknr=i+1似乎更新了所有元素的chunknr

WORLD[0]
WORLD[1]
是不同的对象吗?如果
`WORLD[0]==WORLD[1]
的计算结果为true,则它们没有区别

你有:

WORLD[i]=global.Values.CHUNKPATTERN();
CHUNKPATTERN
是否每次调用时都创建一个
新的
对象?

我打赌这个方法

WORLD[i]=global.Values.CHUNKPATTERN()

始终返回对象的同一实例,以便在数组的每个插槽中都有对同一对象的引用

随后

WORLD[i].chunknr=i+1

您可以在每次迭代中更改同一对象的属性
chunknr
。你说

…似乎更新了所有元素的chunknr

有点像真的,因为所有元素都引用同一个实例


您需要找到一种方法使
global.Values.CHUNKPATTERN()具有全局性每次返回一个新对象。

这一行是您的问题:

WORLD[i]=global.Values.CHUNKPATTERN();
这是将
WORLD[i]
a引用分配给
global.Values.CHUNKPATTERN()
,这意味着它们都指向同一个对象!对于循环的每次迭代,您只是创建了越来越多的对相同的全局对象的引用

有时候这不是你想要的。在这种情况下,您需要复制该值,这可以通过多种方式完成,但在大多数情况下,您可以简单地克隆它。所有Java对象都支持
clone()
方法,尽管有时您需要重写它来为类执行正确的操作

这意味着您应该将上述行替换为:

WORLD[i]=(YourType)global.Values.CHUNKPATTERN().clone();
其中,
YourType
是类的实际类型,因为您在发布的代码片段中忽略了该类型

希望有帮助

WORLD[i]=(YourType)global.Values.CHUNKPATTERN().clone();