我想知道,每当我使用变量或只是方程的结果时,用方程式声明变量是否会重新调用方程式。
例如,我有一个变量被定义为半径为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?换句话说,计算机是每次还是只进行一次计算并重用该值?
如果这篇文章迫使计算机重复计算,我该如何改进呢? (代码将使用像这样声明的变量进行数十亿次操作)
答案 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:
局部变量声明语句是可执行语句。每次执行时,都会按从左到右的顺序处理声明符。如果声明者具有初始值设定项,将初始值设定项进行评估,并将其值分配给变量。