2012-05-10 2 views
1

라인 간의 차이는 라인 A 및 라인 B로 표시된 선으로 표시되어 이것이 코드최종 final 변수와 최종 final 변수의 곱셈의 차이점은 무엇입니까?

public class ConstantFolding { 

    static final int number1 = 5; 
    static final int number2 = 6; 

    static int number3 = 5; 
    static int number4 = 6; 

    public static void main(String[ ] args) { 
     int product1 = number1 * number2;    //line A 
     int product2 = number3 * number4;    //line B 
    } 
} 

고려?

+3

아마도 약간의 질문을 편집 한 다음에 다시 열어 투표 하겠지만, 아마도 조금 더 자세하게 작성되었을 수있는 게시물의 코팅에 아마도 유효한 질문 (매우 좋은 답변을 촉발했습니다)이 될 수 있습니다. 나 완전히 틀렸어? –

+1

또한, 그것은 3 다운 득표를하지 않아도 – keyser

답변

8

차는 product1 필요한 곱셈 상수number1 같이 number2컴파일 시간에 수행된다는 것이다.

number3number4의 값이 변경 될 수 있으므로 product2의 계산이 실행 시간에 컴파일됩니다. 실제로 값을 변경 한 다음 main으로 다시 전화 할 수 있습니다.

상수 식과 상수 변수에 대한 자세한 내용은 JLS의 15.284.12.4 구역을 참조하십시오.

+0

흥미 롭습니다. 의미가 있지만 마음에 오지 않았습니다. 좋은 대답. – teh1

+0

@ 존 - 당신은 -4 질문을하고 그것을 내가 자바에 대해 오늘 배운 가장 흥미로운 새로운 것으로 만들었습니다. –

+2

@EranMedan : Excellent! 주위를 돌아서 기뻐 항상 :) –

1

product1product2 모두 그냥 어떤 설명없이 코드 문을 게시 할 수 없기 때문에 메시지가 당신을 공격 30

에 동일, 차이가 없습니다.

+3

다음 코드를 컴파일하고 javap를 사용하여 생성 된 바이트 코드를 봐 ... –

+0

나는 어떤 프로그래밍상의 차이나 런타임이나 컴파일 시간 차이, 또는 그런 것을 요구하고 있었다. .. 나는 그것을 마침내 얻었다. 그러나 바이트 코드를 보는 방법. ? – sam

관련 문제