java - 将对象引用传递给方法

标签 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);
    }
}

代码 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);
    }
}

最佳答案

在这两种情况下,changedetails() 中的引用“e”和 main() 中的“emp”都指向同一个对象。

在代码中(一)

当你使 e=null 时,在 changedetails() 中;只有 e 停止指向对象。但是 emp 继续指向对象。所以在 main() 中,当你执行 emp.id 值打印时没有 NullPointerException

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

关于java - 将对象引用传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605760/

相关文章:

language-agnostic - 按引用传递与按值传递有什么区别?

Java是按值传递吗?

c++ - 为什么 C++ 模板数组长度推导需要类似于 "f(T (&a)[N]"?

C++:引用和指针问题(关于 OpenGL 的示例)

java - 疑惑,java在传递对象引用时是按值调用还是按引用调用?

swing - 默认 laf 不加载

java - 如何在 JTextfield 内正确实现 SHIFT + BACKSPACE 按键

c++ - 使用 std::pairs 数组初始化 std::map 问题(指针错误?)

Java字符串如何替换 "with\"以转义JSON?

java.sql.SQLException : Parameter index out of range (1 > number of parameters, 为 0)