用方程式声明变量时,内存分配会发生什么变化?

时间:2016-11-26 19:18:53

标签: java variables memory-management

我想知道,每当我使用变量或只是方程的结果时,用方程式声明变量是否会重新调用方程式。

例如,我有一个变量被定义为半径为SHELL += -eu GREEN=$(shell echo -e "\033[0;32m") RED=$(shell echo -e "\033[0;31m") AWS:=$(shell command aws --version 2> /dev/null) $(info ${GREEN} ✓ Testing our local environment for dependencies.) all: prereqs prereqs: ifndef AWS $(error "${RED} AWS is not available please install aws-cli") endif @echo "${AWS}" 的圆的区域。

radius

该区域是定义为double radius = 0.5d; double pi = 3.1415926535d; double area = Math.pow(radius,2)*pi; 还是定义为0.78539816337?换句话说,计算机是每次还是只进行一次计算并重用该值?

如果这篇文章迫使计算机重复计算,我该如何改进呢? (代码将使用像这样声明的变量进行数十亿次操作)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

=符号右侧的表达式称为初始值设定项,并在执行声明语句时执行。

这在Java语言规范中定义,§14.4.2 Execution of Local Variable Declarations

  

局部变量声明语句是可执行语句。每次执行时,都会按从左到右的顺序处理声明符。如果声明者具有初始值设定项,将初始值设定项进行评估,并将其值分配给变量