为什么下面的代码打印'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;
}
答案 0 :(得分:5)
您正在将方法sb
中的局部变量append()
设置为null
- 这不会影响调用环境的变量,它保持不变。
答案 1 :(得分:0)
因为您的自定义追加模型没有将sb返回给父方法。因此System.out.println(sb.toString());
只是在当前上下文中返回sb方法。
答案 2 :(得分:0)
因为如果为方法参数赋值,它会在该方法的范围内维护新值 。换句话说,如果将System.out.println(sb)
置于append
方法内,它将抛出NPE。