2012-08-09 70 views
-1

可能重复:
Is Java “pass-by-reference”?为什么代码打印'test'而不是NullPointerException?

为什么下面打印 '测试',而不是抛出一个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; 
} 
+1

如果您在调试器中逐步调试代码,您将会看到每行代码在做什么,并且会使这一点更加清晰。 – 2012-08-09 12:59:54

回答

5

要设置局部变量sb的方法append()null - 不影响调用环境的变量,它仍然是相同的。

0

因为您的自定义附加模型不会将sb返回到父方法。因此System.out.println(sb.toString());只是返回当前上下文中的sb方法。

0

因为如果你为一个方法参数赋值,它将在该方法的范围内保持新值只有。换句话说,如果您将System.out.println(sb)置于append方法内,它会抛出NPE。

相关问题