这是我用来了解 java 如何处理对象内存的测试代码。
public class TestCode {
public static void main(String[] args) {
TestCode obj = new TestCode();
CustomClass cs1 = new CustomClass(5);
obj.updateExistingObj(cs1);
System.out.println(cs1.val);
CustomClass cs2 = new CustomClass(5);
obj.instantiateExistingObj(cs2);
System.out.println(cs2.val);
CustomClass cs3 = null;
obj.updateNullObj(cs3);
System.out.println(cs3.val);
}
void updateExistingObj(CustomClass cs1) {
cs1.val = 9;
}
void instantiateExistingObj(CustomClass cs2) {
cs2 = new CustomClass(9);
}
void updateNullObj(CustomClass cs3) {
cs3 = new CustomClass(9);
}
}
class CustomClass {
int val;
CustomClass next;
CustomClass(int x) { val = x; }
}
我正在打印的第一个 syso 的输出 cs1.val
我得到的预期值为 9。
我正在打印的第二个 syso 的输出 cs2.val
我得到 5 作为输出,而不是 9。
我正在打印的第三个 syso 的输出 cs3.val
我得到一个null pointer exception
.
有人能帮助我了解幕后发生的事情吗?当我们将对象作为函数参数传递时,java到底如何处理内存位置?感谢您的帮助!!
最佳答案
cs2
和 cs3
是局部变量,为它们分配新值在声明它们的方法之外没有效果。
关于java - 将 Java 对象实例化为传递的对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723613/