1

这是我用来了解 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 究竟是如何处理内存位置的?谢谢帮忙!!

4

1 回答 1

0

cs2并且cs3是局部变量,为它们分配新值在声明它们的方法之外没有任何影响。

于 2019-08-30T09:05:32.493 回答