2016-11-26 1 views
0

방정식을 사용하여 변수를 선언하면 방정식의 결과 또는 방금 결과를 사용할 때마다 방정식이 호출되는지 궁금합니다.방정식을 사용하여 변수를 선언 할 때 메모리 할당은 어떻게됩니까?

예를 들어 반경이 radius 인 원의 면적으로 정의되는 변수가 있습니다.

double radius = 0.5d; 
double pi = 3.1415926535d; 
double area = Math.pow(radius,2)*pi; 

이 지역은 pi*radius^2 또는 0.78539816337로 정의 할 것인가? 즉, 컴퓨터가 매번 계산을하거나 한 번만 계산하여 해당 값을 다시 사용합니까?

이 기록을 통해 컴퓨터가 계산을 반복해야한다면 어떻게 향상시킬 수 있습니까? (이 코드는 이와 같이 선언 된 변수를 사용하여 수십억 개의 연산을 수행합니다.)

+0

은 반경 상수입니까? – developer

+1

그들은 모두 일정하게 유지됩니다. –

답변

0

단 한번 계산됩니다. 이제

double radius = 0.5d; 
double pi = 3.1415926535d; 
double area = Math.pow(radius,2)*pi; 
double x = area; 

의이 바이트 코드를 살펴 보자 :의 당신의 코드처럼 보이는 있도록, 다음 줄에 area을 사용하고자한다고 가정 해 봅시다

public static void main(java.lang.String[]); 
    Code: 
     0: ldc2_w   #2   // double 0.5d 
     3: dstore_1 
     4: ldc2_w   #4   // double 3.1415926535d 
     7: dstore_3 
     8: dload_1 
     9: ldc2_w   #6   // double 2.0d 
     12: invokestatic #8   // Method java/lang/Math.pow:(DD)D 
     15: dload_3 
     16: dmul 
     17: dstore  5 
     19: dload   5 
     21: dstore  7 
     23: return 

area의 값은 라인에 저장됩니다

area 변수를 사용하려는 경우로드되고 재 계산되지 않습니다.

19: dload   5 
0

= 기호의 오른쪽에있는 표현은 초기화라고하며, 선언 문이 실행될 때 실행됩니다.

이것은 Java 언어 사양, §14.4.2 Execution of Local Variable Declarations에 정의되어

로컬 변수 선언 문은 실행 문입니다. 실행될 때마다 선언자는 왼쪽에서 오른쪽 순으로 처리됩니다. 선언자가 초기화 프로그램을 가지고있는 경우 이니셜 라이저가 평가되고 해당 값이 변수에 할당됩니다.

관련 문제