当我尝试自我回答这个问题时,我只能找到有关从数组中删除项目的其他问题,以便通过删除的对象的项目在索引中向下移动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]);
答案 0 :(得分:1)
这是Pass by Reference
vs Pass by Value
。
Java是按值传递的,在这种情况下,值是引用。这是一个微妙的区别。这意味着如果你在一个地方改变被引用的对象,它将随处变化。但它不会改变参考。如果我将引用设置为等于其他内容,则原始对象不会更改。
答案 1 :(得分:0)
这就是Max说的原因。其原因相同,如果您将一个方法参数设置为null(在方法内),它将不会影响调用者。
如果你想要,你可以存储该对象的包装类数组,然后调用包装类的setter ......虽然不是很整洁。
PS。不要将变量名称大写......这会让人感到困惑。