将对象引用传递给方法

Vis*_*kur 2 java pass-by-reference pass-by-value

如果在changedetails()中将Employee引用设为null,则保留变量id值并且不抛出NullPointerException(代码1)可能是因为我们只传递了对象引用的副本,但在代码2中为什么变量值已更改

代码1:

public class JavaPassing {
    public static void changedetails(Employee e)
    {
        e=null;
    }

    public static void main(String args[])
    {
        Employee emp = new Employee("Vishal",7);
        changedetails(emp);
        System.out.println(emp.id);
    }
}
Run Code Online (Sandbox Code Playgroud)

代码2:

public class JavaPassing {
    public static void changedetails(Employee e)
    {
        e.id=9;
    }

    public static void main(String args[])
    {
        Employee emp = new Employee("Vishal",7);
        changedetails(emp);
        System.out.println(emp.id);
    }
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*ver 5

In both cases Reference 'e' in changedetails() and 'emp' in main() both point to same object.

在代码(1)

当你使e = null时,在changedetails()中; 只有指向对象的STOPS.但是继续指向对象.所以在main()中你做emp.id值打印而没有NullPointerException

在代码(2)中, 当你使e.id = 9时,在changedetails()中记住两个引用都指向同一个对象,
changedetails()中的'e'和main()中的'emp'指向同一个对象....所以e.id = 9表示对同一个对象进行更改,因此当你在main()值中执行emp.id时为9