当我运行以下代码时:
int n = 20;
int result = (n % 2)-1;
int nextResult = result + 1;
for(int i =0; i < 5; i++)
{
n += 1; nextResult += 1;
System.out.println("\n" + result + "\n" + nextResult);
}
我得到以下结果:
20
0
20
1
20
2
20
3
20
4
BUILD SUCCESSFUL (total time: 0 seconds)
result
和nextResult
的公式是否在每次迭代时解析,或者我只是得到初始结果?
如果上述查询的答案是前者,那是jvm的int变量处理的典型吗?
是否存在相反的情况?
答案 0 :(得分:2)
只有在使用某种=
设置变量时才会解析变量。更改与另一个变量有关系的变量不会更新另一个变量;你必须明确地这样做。
int n = 20;
int result = (n % 2)-1;
int nextResult = result + 1;
for(int i =0; i < 5; i++) {
n += 1;
result = (n % 2)-1; //update result because n changed
nextResult = result + 1; //update nextResult because result changed
System.out.println("\n" + result + "\n" + nextResult);
}
答案 1 :(得分:2)
根据我过去对软件新手的经验,我想我知道OP混乱的根源是什么。
这是一个程序,而不是数学方程组。这里的关键见解是程序逐行执行 。这条线
int nextResult = result + 1;
是一项任务;它会在特定时刻获得result
的值,向其中添加一个,并将该值分配给nextResult
。它确实不在result和nextResult之间建立关系,以便后者总是比前者大一个。任何一个变量都可以在路上的某个点分配,而不会影响另一个。
例如,这是一个有效的程序:
a = 1
b = 2;
a = b;
如果你把它当作一个方程组,那就是胡说八道。如果将其视为一系列处理指令 - 计算右侧,分配给左侧的变量,继续下一行 - 没有错。