2013-08-26 74 views
1

我有下面的類:在Java中更新ArrayList中的元素?

public class Profile{ 
    String name, age, location; 
} 

說我那麼有以下代碼:

ArrayList<Profile> profiles = somePopulatedArrayList; 
Profile profile = profiles.get(1); 
profile.name = "New name here"; 

我的問題是,當我有上述情況,是在ArrayList中的對象得到.name更新,還是我在這裏創建一個全新的對象,只改變該對象的.name,而存儲在ArrayList中的Profile對象仍然有舊名稱?

我想編輯ArrayList中的對象的屬性,我想知道上述方法是否正確?

+0

以這種方式訪問​​類字段不是一個好習慣。您應該將它們聲明爲私有字段,並使用getter/setter。 –

+1

profiles.get(1).setName('newName'); –

+1

ArrayList中沒有'對象',這就是你需要從這個問題中學習的東西。該列表包含指向內存中某個對象的引用(地址)。 – Fernando

回答

2

否新建對象已創建,您正在修改現有值。

其實這不是一個很好的做法,你應該允許訪問您的 類變量直接,讓他們爲私有,並提供 爲同一的setter/getter方法。

public class Profile { 
    private String name, age, location; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAge() { 
     return age; 
    } 

    public void setAge(String age) { 
     this.age = age; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

} 
4

沒有創建新對象。您已更新列表中的對象,即列表中的對象將具有「New name here」作爲名稱。

實際上,您可以使用調試器進行測試和查看。

2

在Java中,所有作爲對象類型的變量都持有對對象的引用。當您在集合上調用get時,它會返回對其內部對象的引用,因此,如果您繼續修改該對象,那麼查看相同對象的任何其他人都將看到這些更改。