混乱上涨,因为这个职位 。 作者更新他的岗位,结果变得清晰。 结论:Java的评估左到右的表达式
关闭!
作为表达的评价是从右到左下面的代码应该存储做5
中j
:
int i=2;
int j=++i+i++;
System.out.println(j);
但我得到6作为输出,这迫使我重新思考到左评估想法的权利 。 请在这里解释理论。
混乱上涨,因为这个职位 。 作者更新他的岗位,结果变得清晰。 结论:Java的评估左到右的表达式
作为表达的评价是从右到左下面的代码应该存储做5
中j
:
int i=2;
int j=++i+i++;
System.out.println(j);
但我得到6作为输出,这迫使我重新思考到左评估想法的权利 。 请在这里解释理论。
int i = 2;
int j = ++i + i++;
是相同的
int i = 2;
// This part is from ++i
i = i + 1;
int left = i; // 3
// This part is from i++
int right = i; // 3
i = i + 1;
int j = left + right; // 3 + 3 = 6
相反,如果你做:
int i = 2;
int j = i++ + ++i;
这将是等效于:
int i = 2;
// This part is from i++
int left = i; // 2
i = i + 1;
// This part is from ++i
i = i + 1;
int right = i; // 4
int j = left + right; // 2 + 4 = 6
因此总和是一样的,但被概括条款是不同的。
你得到6,因为它是3 + 3
:
++i
哪个递增第一 (3),则使用该值 +i
这又增加了3 ++
不参加此外,但使用它后我递增 你的假设是错误的。 以下是文件说:
除了赋值运算符所有的二元运算符从左向右评估
所以
++i+i++
相当于
(++i)+(i++)
其中++i
首先计算。
这使
3+3
这是6
(和i具有值4
在此之后)。
第一++
i递增。 在+
增加了我自己。 i是3。
你从哪儿弄来的想法,它是从右到左? 这是左到右。
什么是Java中的计算顺序的规则?
这究竟是怎么工作的,因为一元运算符比二进制更precedance:
int i=2;
int j =(++i)+(i++);
^^^ ^^^
3 +(i++) //The value of i is now 3.
^^^ ^^^
3 + 3 //The value of i is incremented after it is assigned.
当评估一个表达式,如a+b
,然后才能添加“B”到“A”,你需要知道什么“一”的。 在这种情况下,a是++ I,其为3,并且b为i ++是3.评价从右到左给出3 + 3 = 6
在Java和C#,子表达式的评估将完成左到右:
int j=++i + i++;
包含以下两个子表达式++i
和i++
。 这些子表达式将在此为了使这将转化为进行评估:
int j= 3 + 3;
如Java和C#中, ++i
将被执行返回3
,但我将改为3
所述第二前i++
。 所述第二返回的当前值i
是3
现在和以后i++
的值i
将是4
。
在C ++中,这将是不确定的。
而在现实世界中,你不想输入此代码(除代码高尔夫)