2012-08-09 4 views
-1

가능한 중복 :
Is Java “pass-by-reference”?코드가 NullPointerException 대신 '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; 
} 
+1

디버거에서 코드를 단계별로 실행하면 각 코드 행이 무엇을하는지 알게되고 훨씬 명확 해집니다. –

답변

5

당신은 방법 append()null에있는 지역 변수 sb을 설정하는 - 호출 환경의 변수에 영향을주지 않습니다, 그것은 동일하게 유지됩니다.

0

맞춤 추가 모델이 sb를 부모 메소드로 다시 보내지 않기 때문에. 따라서 System.out.println(sb.toString());은 단순히 현재 컨텍스트에서 sb 메서드를 반환하고 있습니다.

0

메서드 매개 변수에 값을 할당하면 해당 메서드의 범위 내에 새 값 만 유지되기 때문에입니다. 당신이 append 방법 안에 System.out.println(sb)를두면 다른 말로하면 NPE를 던질 것입니다.

관련 문제