该代码是如何处理的?

时间:2016-04-07 14:38:10

标签: java jvm int

当我运行以下代码时:

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)
  1. resultnextResult的公式是否在每次迭代时解析,或者我只是得到初始结果?

  2. 如果上述查询的答案是前者,那是jvm的int变量处理的典型吗?

  3. 是否存在相反的情况?

2 个答案:

答案 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;

如果你把它当作一个方程组,那就是胡说八道。如果将其视为一系列处理指令 - 计算右侧,分配给左侧的变量,继续下一行 - 没有错。