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

これは1回計算されます。あなたはあなたのコードのように見えるので、次の行に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の値が一列に格納されます。

を使用し、変数areaを使用する場合は、単に読み込まれ、再計算されません。

19: dload   5 
0

=記号の右側の式は初期化子と呼ばれ、宣言文が実行されるときに、それが実行されます。

これは、Java言語仕様、§14.4.2 Execution of Local Variable Declarationsに定義されています。

ローカル変数宣言文は実行文です。実行されるたびに、宣言子は左から右の順に処理されます。宣言子にイニシャライザがある場合、イニシャライザが評価され、その値が変数に割り当てられます。

関連する問題