我正在做一些有关Java的研究,发现这很令人困惑:
for (int i = 0; i < 10; i = i++) {
System.err.print("hoo... ");
}
这是永无止境的循环!
有人很好地解释了为什么会发生这种事情吗?
for (int i = 0; i < 10; i = i++) {
上面的循环与以下内容基本相同:-
for (int i = 0; i < 10; i = i) {
3 次你的一部分for
声明- i = i++
,被评估为: -
int oldValue = i;
i = i + 1;
i = oldValue; // 3rd Step
您需要从此处删除分配,以使其起作用:-
for (int i = 0; i < 10; i++) {
(根据评论的OP请求)
x = 1; x = x++ + x++;
:-就注释中指定的问题而言,以下表达式的结果:-
x = 1;
x = x++ + x++;
获得如下:-
让我们标记第二条语句的不同部分:-
x = x++ + x++;
R A B
现在,首先(A + B)
将评估RHS部分,然后将最终结果分配给x
。因此,让我们继续前进。
首先A
评估:-
old1 = x; // `old1 becomes 1`
x = x + 1; // Increment `x`. `x becomes 2`
//x = old1; // This will not be done. As the value has not been assigned back yet.
现在,由于此处未完成A
to 的分配R
,因此不会执行第三步。
现在,进行B
评估:-
old2 = x; // old2 becomes 2. (Since `x` is 2, from the evaluation of `A`)
x = x + 1; // increment `x`. `x becomes 3`.
// x = old2; // This will again not be done here.
现在,要获取的值x++ + x++
,我们需要完成在A
和的求值中剩下的最后一个赋值B
,因为现在是在中赋值x
。为此,我们需要替换:-
A --> old1
B --> old2 // The last assignment of both the evaluation. (A and B)
/** See Break up `x = old1;` towards the end, to understand how it's equivalent to `A = old1; in case of `x = x++`, considering `x++ <==> A` in this case. **/
因此x = x++ + x++
,变为:-
x = old1 + old2;
= 1 + 2;
= 3; // Hence the answer
x = x++
,x = x++ + x++
以防万一:想知道为什么更换完成作为A --> old1
和不x --> old1
作为的情况下x = x++
。
深入研究x = x++
零件,特别是最后一个作业:-
x = oldValue;
如果您认为x++
在A
这里,则可以将以上分配分为以下步骤:-
A = oldValue;
x = A;
现在,对于当前问题,它与:-
A = old1;
B = old2;
x = A + B;
我希望这一点很清楚。
问题内容: 当我运行以下示例时,我得到输出0,2,1 我不明白为什么输出是0,2,1而不是0,2,2 问题答案: 意思是现在。调用打印,但返回0,所以和 在此之前,现在想象被调用并替换为0 所以 现在它将是 用简单的话(从这里 @ Piotr) “ i = i ++”大致翻译为 另一个这样的例子: 同样的基本原理
增量运算符++将1添加到其操作数,减量运算符 - 从其操作数中减去1。 因此 - x = x+1; is the same as x++; 同样 - x = x-1; is the same as x--; 递增和递减运算符都可以在操作数之前(前缀)或后跟(后缀)。 例如 - x = x+1; can be written as ++x; // prefix form 或者 - x++; /
循环中的和有区别吗?这仅仅是语法问题吗?
所以这可能是一个愚蠢的问题,但我时不时地遇到这种语法错误,似乎无法吸取教训-因为我根本不明白为什么这不起作用。 由于某种原因,三元运算符不能处理增量或减量。 在控制台中,我发现了这些结果: 在搜索答案时,我发现另一个用户对意外行为有同样的体验。 经过更多的搜索,我发现前增量工作正常: 在试图确定预增量的工作原理时,遇到了这个答案。 这让我明白了为什么它能工作,而后增量不能。我想,如果三进制的操作顺
问题内容: 我不明白为什么这个职位增加方程不增加。我以为在+=操作之后,该值将增加1,然后围绕i的第二次将具有1值。但是输出是一个零零的无限循环。有谁能解释为什么“ i”不增加。 问题答案: @ njzk2的答案是正确的,但指出正确的 原因 很有用。 还有其他可能性-例如,为什么Java在分配后不执行postincrement运算符?(答案:因为那不是Java语言设计者选择的) Java语言规范第
问题内容: 我正在从Java切换到C ,并且想知道C 是否包含我在Java中使用的增强的for循环,例如: 在C ++中是否可能有相同的“快捷方式”? 问题答案: 在C ++ 11中,如果编译器支持,则可以。这称为基于范围的。 它适用于C样式数组以及具有函数并返回迭代器的任何类型。例: