对象分配操作如何工作

时间:2014-10-03 12:35:52

标签: java

我对对象引用的工作方式感到困惑。在下面的示例中,在循环结束时,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指向每次循环迭代中的temptemp更改,这是否意味着result也会根据temp指向的位置而发生变化?

4 个答案:

答案 0 :(得分:4)

它将指向存储在myList索引3的对象(截至运行该代码时)。

操作:

result = temp;

temp中当前的值复制到result。该值是对您从myList.get(i)获得的对象的引用。 tempresult之间没有持久的链接。

答案 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)返回的相同对象。