为什么代码打印'test'而不是NullPointerException?

时间:2012-08-09 12:53:47

标签: java nullpointerexception

  

可能重复:
  Is Java “pass-by-reference”?

为什么下面的代码打印'test'而不是抛出NullPointerException

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    sb.append("test");
    append(sb);
    System.out.println(sb.toString());
}

public static void append(StringBuilder sb) {
    sb = null;
}

3 个答案:

答案 0 :(得分:5)

您正在将方法sb中的局部变量append()设置为null - 这不会影响调用环境的变量,它保持不变。

答案 1 :(得分:0)

因为您的自定义追加模型没有将sb返回给父方法。因此System.out.println(sb.toString());只是在当前上下文中返回sb方法。

答案 2 :(得分:0)

因为如果为方法参数赋值,它会在该方法的范围内维护新值 。换句话说,如果将System.out.println(sb)置于append方法内,它将抛出NPE。