【发布时间】:2014-05-01 14:16:24
【问题描述】:
如果在 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);
}
}
代码 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);
}
}
【问题讨论】:
-
这是事实,问题出在哪里?
-
根据 SCJP 的书“对方法内部发生的对象的任何更改都将针对其引用被传递的对象进行”。因此,如果我们在方法中将 Employee 对象引用设为 null,那么实际的对象引用也应该设为 null。我在这里错过了什么?
标签: java pass-by-reference pass-by-value