有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是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);
    }

这会同时打印椅子和桌子,而我希望它只打印椅子,因为当我们创建emp对象列表时,它只有椅子。有人能解释一下这背后的原因吗


共 (2) 个答案

  1. # 1 楼答案

    您正在创建列表对象后添加。。。。所以它会存储在列表内存中。。。 使用list.index(0);只打印椅子

  2. # 2 楼答案

    首先,我们需要了解什么是参考变量:

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

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

    无论何时添加新元素,它总是引用与ArrayList对象相同的地址

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

    这就是为什么它保留了我们在这里作为引用传递的对象的值

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

    总之,它是同一个物体,同时也是印刷的原因