2016-11-26 14 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

它只會計算一次。比方說,你想在下一行使用area,所以代碼如下:

double radius = 0.5d; 
double pi = 3.1415926535d; 
double area = Math.pow(radius,2)*pi; 
double x = 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值存儲在行:

17: dstore  5 

當你想使用變量area,它只是加載,而不是重新計算:

19: dload   5 
0

=標誌右邊的表達被稱爲初始化,並執行聲明語句時,它被執行。

這是在Java語言規範,§14.4.2 Execution of Local Variable Declarations定義:

局部變量聲明語句是一個可執行語句。每次執行時,聲明符都按從左到右的順序處理。如果一個聲明符有一個初始化符,則初始化符被評估並且它的值被分配給變量

相關問題