2013-08-26 73 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时,它会返回对其内部对象的引用,因此,如果您继续修改该对象,那么查看相同对象的任何其他人都将看到这些更改。