是否可以删除数组中的对象而不是索引? (Java)的

时间:2017-07-05 21:51:05

标签: java arrays

当我尝试自我回答这个问题时,我只能找到有关从数组中删除项目的其他问题,以便通过删除的对象的项目在索引中向下移动1。

在下面的代码中,我有两个包含SomeObject类(带有name属性)的数组:SomeObject_ONE和SomeObject_TWO。

下面我把一个对象" some-object"在第一个数组中,然后将第二个数组设置为等于第一个数组中的对象。我仍然可以通过更改第二个数组中对象的属性(第三个缩进)来更改第一个数组中对象的属性。

但是,当我尝试将第二个数组中的对象设置为null时,它不会将第一个数组设置为null,而是仅删除第二个数组中对象的索引(第4个缩进)。 / p>

是否有删除数组中的对象而不是删除其数组索引?

感谢。

    SomeObject[] ObjectArray_ONE = new SomeObject[10];
    SomeObject[] ObjectArray_TWO = new SomeObject[10];

    ObjectArray_ONE[0] = new SomeObject();
    ObjectArray_TWO[0] = ObjectArray_ONE[0];

    System.out.println(ObjectArray_ONE[0].name+" outputs default name");
    ObjectArray_TWO[0].name = "Name changed from OA2";
    System.out.println(ObjectArray_ONE[0].name+" outputs Name changed from OA2");

    System.out.println("Should not be null        : "+ObjectArray_ONE[0]);
    ObjectArray_TWO[0] = null;
    System.out.println("Should be null            : "+ObjectArray_ONE[0]);
    ObjectArray_ONE[0] = null;
    System.out.println("Only now is it really null: "+ObjectArray_ONE[0]);

2 个答案:

答案 0 :(得分:1)

这是Pass by Reference vs Pass by Value

Java是按值传递的,在这种情况下,值是引用。这是一个微妙的区别。这意味着如果你在一个地方改变被引用的对象,它将随处变化。但它不会改变参考。如果我将引用设置为等于其他内容,则原始对象不会更改。

答案 1 :(得分:0)

这就是Max说的原因。其原因相同,如果您将一个方法参数设置为null(在方法内),它将不会影响调用者。

如果你想要,你可以存储该对象的包装类数组,然后调用包装类的setter ......虽然不是很整洁。

PS。不要将变量名称大写......这会让人感到困惑。