我对对象引用的工作方式感到困惑。在下面的示例中,在循环结束时,result
会指向myList.get(9)
还是myList.get(3)
?
Class MyClass{
...
}
public static MyClass myUtilityMethod(){
List<MyClass> myList = new ArrayList<MyClass>(10);
//initialize the list
....
////////////
MyClass tmp = null;
MyClass result = null;
for(int i =0; i < 10; i++){
temp = myList.get(i);
if(i == 3) result = temp;
}
return result;
}
由于result
指向每次循环迭代中的temp
和temp
更改,这是否意味着result
也会根据temp
指向的位置而发生变化?
答案 0 :(得分:4)
它将指向存储在myList
索引3
的对象(截至运行该代码时)。
操作:
result = temp;
将temp
中当前的值复制到result
。该值是对您从myList.get(i)
获得的对象的引用。 temp
和result
之间没有持久的链接。
答案 1 :(得分:1)
Java对象变量是对象的引用。指定对象的引用时;不复制对象本身的内容。
在您的情况下,result
的分配仅在i == 3
时发生一次。分配后,result
引用列表位置3处的对象。由于循环中没有result
的其他分配,result
也会在循环结束后引用myList.get(3)
调用的结果。
答案 2 :(得分:1)
结果实际上并不指向temp。将temp指定给结果时,不会将对象temp指定给结果,而是将结果(指针)指定给结果。赋值结果包含与temp相同的内存位置指针。它将指向temp被分配给结果时temp的相同对象。因此,结果将指向myList List Object的索引3处的对象。它不会随着临时更改引用而更改,因为结果不指向temp它指向temp指向索引3处的List Object时指向的对象。
答案 3 :(得分:0)
result
将指向 i
3
时指向的同一对象 temp。这是myList.get(3)
返回的相同对象。