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