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)
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