java에서 객체를 null로 했는데 static변수값이 남아있습니다.

FlOw의 이미지

public class Tt{
	public static void main(String[] args){
		Tu a = new Tu();
		a=null;
		System.out.println(a.x);
	}
	
}
class Tu{
	static int x=6;
}

NullPointException이 나야 되는것 아닌가요 :?:
creativeidler의 이미지

static 멤버는 객체가 아니라 클래스가 소유합니다. 따라서 a.x는 실제로는 Tu.x로 컴파일되어서 값이 찍히는 것입니다.

FlOw의 이미지

제가 궁금한것은 새로 생성한 Tu객체를 가르키는 인스턴스 a를 null로
재정의한뒤에도 a가 Tu를 가르키고 있는지 입니다.

-------------------- 절취선 --
행복하세요:)

iolo의 이미지

a.x라는 표현자체가 잘못된 표현입니다.
Tu.x라고 쓰는 것이 맞습니다.
a.x라고 써도 컴파일러가 Tu.x라고 해석해서 컴파일 해 주는 것일 뿐입니다.

최근의 컴파일러에서는 경고를 내는 옵션이 있습니다.

스태틱 멤버는 네임스페이스가 분리되어 있을뿐 전역 심볼들입니다.

----
the smile has left your eyes...

iolo의 이미지

글을 써놓고 보니 위에서 이미 답변을 해주셨군요.

물론, a = null한 뒤에는, a는 더이상 Tu 객체의 레퍼런스가 아닙니다.

정리하면 a.x는 편의상 그렇게 쓰는것을 허용할 뿐, Tu.x와 동일합니다.

----
the smile has left your eyes...