这是我用来理解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; }
}在打印cs1.val的第一个系统的输出中,我得到的期望值是9。
在我打印cs2.val的第二个syso的输出中,我得到了5作为输出,而不是9。
第三个系统的输出,在我打印cs3.val的地方,我得到了一个null pointer exception。
有没有人能帮我了解一下这里到底发生了什么?当我们将一个对象作为函数参数传递时,java到底是如何处理内存位置的呢?谢谢你的帮助!!
发布于 2019-08-30 17:05:32
cs2和cs3是局部变量,为它们赋值对声明它们的方法之外没有任何影响。
https://stackoverflow.com/questions/57723613
复制相似问题