2014-07-17 2 views
0

첫번째 프로그램 :범위, 수명의 측면에서 차이가 있습니까?

class Demo { 
    public static void main(String args[]) { 
     Object obj ; 
     while(true) { 
     obj = new Object(); 
     } 
    } 
} 

2 프로그램 :

class Demo { 
    public static void main(String args[]) { 
     Object obj = null; 
     while(true) { 
     obj = new Object(); 
     } 
    } 
} 

질문 : 제 프로그램 OBJ 루프에 값을 할당하는 두 개의 프로그램 obj 범위의 점에서 차이가 (존재) obj는 처음에 (두 번째 프로그램에서) 널값이 할당됩니다.

+0

는 오류없이 첫 번째 프로그램 실행을합니까 (while 루프가 어느 시점에서 종료 가정) 초기화되지 그 때문에 컴파일 오류가 발생합니다 ? – bumbumpaw

+0

예 오류없이 실행됩니다 ... – Anonymous

+0

사실, 객체 유형의 기본값은 'null'입니다. 그래서 intializint 그것은'null' 또는 초기화되지 않는 것과 같습니다. – bumbumpaw

답변

1

두 경우 모두 obj의 범위는 주 방법의 끝까지입니다. 두 프로그램 모두 while(true) 조건으로 인해 무한대로 실행됩니다. 첫 번째 경우에

그러나 루프 외부 obj를 사용하려는 시도는

public static void main(String []args){ 
     Object obj; 
     while(args != null) { 
      obj = new Object(); 
     } 
     System.out.println(obj); //compilation error 
} 
+0

잘못된 ... 컴파일 오류가 없다. – Anonymous

+1

직접 해보고 직접 확인하지 않으시겠습니까? http://ideone.com/xa2Hng –

+0

@nihal 외부에서 'obj'를 사용하면 게시물의 '도달 할 수없는 코드'로 인해 컴파일 오류가 발생합니다. Nikhils 예제에서는 '초기화되지 않은 지역 변수'때문입니다. 컴파일러는 지역 변수가 사용되는 명령문에 도달하기 전에 가능한 모든 경로를 통해 초기화되는지 검사합니다. – Shail016

관련 문제