Java 输出是什么?为什么ArrayList/任何集合都会这样?

Java 输出是什么?为什么ArrayList/任何集合都会这样?,java,arraylist,collections,Java,Arraylist,Collections,下面是我的bean类: public class Employee { private String name = null; public String getName() { return name; } public void setName(String name) { this.name = name; } } 这是我的主要课程: import java.util.ArrayList; public c

下面是我的bean类:

public class Employee {

    private String name = null;

    public String getName() {
        return name;
    }

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

}
这是我的主要课程:

import java.util.ArrayList;

public class MainClass {

    public static void main(String[] args) {

        Employee employee = new Employee();
        employee.setName("First name");

        ArrayList<Employee> empList = new ArrayList<Employee>();
        empList.add(employee);

        employee.setName("Last name");

        for (Employee emp : empList) {
            System.out.println(emp.getName());
        }
    }
}
当我执行时,输出是:Last name

我的问题是:

正如我所知,Java是 那么这本书的复印件呢 employee对象保存在ArrayList中,或者它引用了 对象值更改时员工的原始对象 在添加到ArrayList后是否保留姓氏? 每个收藏都是这样的吗? employee引用的副本保存在ArrayList中,但由于它引用同一个employee实例,因此稍后通过employee引用更改实例会影响存储在ArrayList中的元素

是的,每个集合的行为都是这样的,因为集合不创建传递给它们的实例的副本,它们只存储对这些实例的引用。

员工引用的副本保存在ArrayList中,但由于它引用的是同一个员工实例,稍后通过employee引用更改实例会影响存储在ArrayList中的元素

是的,每个集合的行为都是这样的,因为集合不创建传递给它们的实例的副本,它们只存储对这些实例的引用

正如我所知,Java是按值传递的,或者更确切地说是按变量值的副本传递的,然后执行employee的副本 对象保存在ArrayList中,或者它引用了原始对象 对象值在之后更改为姓氏时的员工 添加到ArrayList? 引用将按值传递。因此,将有两个引用指向同一个Employee实例。一个引用是employee,另一个在arraylist中

每个收藏都是这样的吗? 对。实际上,这不是集合的属性。这就是java的设计方式。所有可变引用类型的行为都是这样的

正如我所知,Java是按值传递的,或者更确切地说是按变量值的副本传递的,然后执行employee的副本 对象保存在ArrayList中,或者它引用了原始对象 对象值在之后更改为姓氏时的员工 添加到ArrayList? 引用将按值传递。因此,将有两个引用指向同一个Employee实例。一个引用是employee,另一个在arraylist中

每个收藏都是这样的吗? 对。实际上,这不是集合的属性。这就是java的设计方式。所有可变引用类型的行为都是这样的。

局部变量employee和列表的第一个元素是对同一对象的两个不同引用。这就是为什么通过setName修改引用的对象(例如在其中一个对象上修改)将通过另一个对象可见

但是,如果通过指定不同的参照来替换参照,则不会影响其他参照

例如:

现在employee和列表的第一个元素引用不同的对象,因此数组中的元素将不会被称为Vishrant。

局部变量employee和列表的第一个元素是对同一对象的两个不同引用。这就是为什么通过setName修改引用的对象(例如在其中一个对象上修改)将通过另一个对象可见

但是,如果通过指定不同的参照来替换参照,则不会影响其他参照

例如:


现在employee和列表的第一个元素引用了不同的对象,因此数组中的元素将不会被称为Vishrant。

当原语传递给函数时,它是按值传递的,当对象传递给函数时,对所述对象的引用按值传递。当原语传递给函数时,它按值传递,当对象传递给函数时,对所述对象的引用按值传递。
employee = new Employee();
employee.setName("Vishrant");