对象字段因未知原因而更改

时间:2015-09-05 16:29:59

标签: java arrays variables

我正在编写一个处理子网的程序。

在simpleIPaddress.class第315行,对象Ted的fullSubnetAddress =“111.111.111.111”。

在simpleIPaddress.class第317行中,对象Ted的fullSubnetAddress由于某种原因而无法改变。它将类的字段变量更改为as textAddress。当最初根据用户输入创建simpleIPaddress地址时,将从代码中较早的程序生成textAddress。

第一次执行for循环后,Ted会在for循环的其余部分永久更改。

在代码中,我正在慢慢填充一个数组。

SubnetItem ted = new SubnetItem(subnetNumber, fullSubnetAddress, fullStartHost,
    fullEndHost, fullBroadcastAddress);
this.subnetArray = new SubnetItem[totalSubnets];

for (int i = 0; i < subnetArray.length; i++)
{

    this.subnetArray[i] = ted; // line 315
    this.subnetArray[i].setSubnetNumber(i);
    System.out.println(ted.toString()); // line 317
    calculateStartingAddress(i);

    System.out.println(ted.toString());

    System.out.println(subnetArray[i].toString());

}

Here is the full code如果需要的话。

1 个答案:

答案 0 :(得分:0)

您只创建一个SubnetItem对象,然后在for循环内重复修改该单个对象,同时指定数组的每个元素指向该对象。当循环结束时,你有一个充满指向同一个对象的数组,现在分配了最后一个值。

如果希望每个数组元素具有不同的值,则需要为每个数组元素创建一个单独的对象。这就像将SubnetItem ted = new SubnetItem(...);行向下移动几行一样简单,使其位于for循环内。