创建对象数组时,数组中的对象是否都指向同一个地址?

时间:2014-03-23 17:59:27

标签: java arrays reference

我创建了一个包含点和索引号的这些对象的数组。我通过扫描仪分配它们,如下所示:

Points[] pointStorage = new Points[10];
pointStorage[index] = new Points(0,0,index);
index++;
while (s.hasNext()) { // s is the Scanner
    double point1 = s.nextDouble(); // X-Coordinate
    double point2 = s.nextDouble();
    pointStorage[index] = new Points(point1,point2,index);
    index++;
}
pointStorage[index] = new Points(0,0,index);

我有一个基本上显示所有对象内容的方法:

for (int i = 0; i < pointStorage.length; i++){
    pointStorage[i].showPoint();
}

输出(作为例子):

The X co-ordinate is 0.0
The Y co-ordinate is 0.0

但是,在我的程序中,数组中的所有对象都已分配了最后一个创建对象的值(点0,0)。有什么特别的原因吗?我认为为每个人创建新地址会阻止这种情况。

编辑:

好的伙计们,所以我发现了问题。显然我已经为Point2D.Double(方法&#34; showPoint&#34;显示)设置了字段(对不起,如果那个术语是错误的,我是OOP的新手),静态的,显然这就是问题所在。我删除了静态修改器,现在它工作正常。抱歉浪费你的时间。

2 个答案:

答案 0 :(得分:0)

您不应该在new循环中使用while。您已经创建了10个点的数组,并且应该使用index迭代。

确保将index设置为0,然后在每个循环上测试数组边界。

当扫描程序返回false时,请考虑使用for循环和break

for( index = 0; index < MAX; index ++ ) {
  if( ! s.hasNext() )
    break;
  double point1 = s.nextDouble(); // X-Coordinate
  double point2 = s.nextDouble();
  Points[index] = Point( point1, point2, index);          
}

这只是一个让你入门的粗略例子。玩得开心......

答案 1 :(得分:0)

好的伙计们,所以我发现了问题。显然,我已经将Point2D.Double对象(方法“showPoint”显示的内容)设置为静态且显然是问题的字段(抱歉,如果该术语错误,我是OOP的新手)。我删除了静态修改器,现在它工作正常。抱歉浪费你的时间。

使用静态修饰符时要小心。