无法理解以下Java程序的输出

时间:2017-01-22 06:14:03

标签: java output

我是Java新手,对此代码的输出有疑问

public class Employee{
    private String name;
    private int age;
    private List<String> stationeryList;

    public Employee(String name, int age, List<String> stationeryList)
    {
      this.name= name;
      this.age = age;
      this.stationeryList = stationeryList;
    }

    // getter methods
    public String getName()
    {
       return name;
    }

    public int getAge()
    {
      return age;
    }

    public List<String> getStationeryList()
    {
        return stationeryList;
    }    

    }

    public static void main(){
    String name = "XYZ";
    int age = 34;
    List<String> list = new ArrayList<String>();
    list.add("Chair");
    Employee emp = new Employee(name, age, list);
    list.add("Desk");
    for(String str:emp.getStationeryList())
     System.out.println(str);
    }

这打印了Chair和Desk,而我期望它只打印Chair,因为我们创建emp对象列表时只有Chair。有人可以解释这背后的原因。

2 个答案:

答案 0 :(得分:0)

您在创建List对象后添加....因此它将存储在List内存中...  使用list.index(0);仅打印主席

答案 1 :(得分:0)

首先,我们需要了解什么是引用变量:

List<String> list = new ArrayList<String>();

这里 list 引用变量引用了 ArrayList 对象,这意味着它的列表总是有ArrayList对象的内存地址。

每当你要添加一个新元素时,它总是引用 ArrayList 对象的相同地址。

您正在将桌面添加到列表对象中,以便它引用相同的内存地址。

这就是它保留我们作为参考传递的对象值的原因

 Employee emp = new Employee(name, age, list);

所以总的来说它同时反映了它的印刷时间。