2016-10-09 10 views
-3

아래에 표시된 Main.java라는 프로그램이 있습니다. 이 프로그램을 컴파일하면 Main.class와 Main $ 1.class라는 두 개의 .class 파일이 생깁니다. 내 문제는 두 .class 파일이 정확히 동일하다는 것입니다.새 스레드의 클래스 파일과 main 클래스 파일은 동일합니다

무엇이 잘못 되었습니까?

새로운 스레드의 run() 메소드에서 일부 코드를 계측 할 수 있지만 새로운 스레드의 run() 메소드에서 코드의 명령어를 찾을 수 없습니다.

public class Main{ 
    public static void main(String...args){ 
     Thread t=new Thread(){ 
     @Override 
      public void run(){ 
      System.out.println("xxxx"); 
      } 
     }; 
    t.start(); 
    } 
} 
+4

내 돈이 올바르게 두 개의 클래스 파일을 비교하지 당신이 될 것입니다. –

+0

당신이 무엇을 요구하는지 모르겠습니다. 이 두 클래스 파일이 동일하다는 것은 무엇을 의미합니까? 그들은 일어날 수 없다. 하나는 외부 공용 Main 클래스 용입니다. 다른 하나는 내부의 익명 클래스 용입니다. 완전히 다른 두 가지! – GhostCat

+0

질문에 대해 더 자세히 설명해주십시오. – Blip

답변

3

돈이 두 클래스 파일을 올바르게 비교하지 않을 것입니다.

md5sum Main.class Main$1.class 

(또는 md5sum 이외의 체크섬 도구)

이 실제로 문자열에 1라는 변수를 대체한다 : 나는 당신이 당신의 bash는 같은 프롬프트에서이 같은 것을 쓰고있어 내기 것 - 해당 변수를 정의하지 않은 경우 해당 변수는 비어 있으므로 다음과 같이 확장됩니다.

md5sum Main.class Main.class 

동일한 파일 내용으로 표시됩니다.

단일 인용 해보십시오 두 번째 문자열을 :

md5sum Main.class 'Main$1.class'