如果我有一个AnObjects数组,我这样做:
AnObject oldObject = arrayOfObjects[validIndex];
arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction);
oldObject.terminate();
arrayOfObjects[validIndex]
的新内容是否会被终止,或原始oldObject
被终止?
换句话说:oldObject是否包含对AnObject的引用,或者它是否包含对AnObject的引用的引用?
答案 0 :(得分:3)
这段代码有点令人困惑。您的对象数组必须引用AnObject
。
AnObject oldObject = arrayOfObjects[validIndex];
您可以在此处将该引用分配给oldObject
。
arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction);
现在,您将validIndex
处的数组引用设置为指向AnObject
的新实例。它不再指向oldObject
。
oldObject.terminate();
它是对堆上对象的引用。
oldObject
指的是堆上的实例;数组中的引用指向您在堆上创建的新实例。
如果oldObject
被终止(无论这意味着什么),那么对于您创建的新实例来说,这并不重要。该数组仍然指向新实例。
答案 1 :(得分:1)
它包含对象的引用。在这种情况下,oldObject将被终止 - 而不是您放置在数组中的新实例。
答案 2 :(得分:1)
然后arrayOfObjects [validIndex]表示内存位置100。
假设存储位置100具有 价值200。
AnObject oldObject = arrayOfObjects [validIndex];
oldObject位于内存位置200。
arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction);
然后存储器位置100具有值300。
oldObject.terminate();
oldObject从未更改过,因此它仍指向内存位置200。
因此,在用新对象替换之后,以前在数组中的项将被终止。
答案 3 :(得分:0)
在Java中没有对引用的引用。忽略基元类型,然后所有变量/数组单元都保持对对象的引用。这是一个片段,说明了这一点:
class Something {
public int n;
}
Something[] arr = new Something[2];
Something s = new Something();
s.n = 2;
arr[0] = s;
System.out.print(arr[0].n); // Output: "2"
arr[0].n += 1;
System.out.print(s.n); // Output: "3"