Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while循环中的增量后操作(java)_Java_Loops_While Loop - Fatal编程技术网

while循环中的增量后操作(java)

while循环中的增量后操作(java),java,loops,while-loop,Java,Loops,While Loop,最近我遇到了这个问题 int i = 10; while (i++ <= 10) { i++; } System.out.print(i); inti=10; 而(i++ i=10。看看i,与10相比 i=10.10这是另一种方法,我可以把我的头绕在这上面。 设f(refi)是一个函数,它通过引用接受i并将其值增加1。因此f(refi)=i+1 现在我们有了f(refi),上面的代码可以写成 int i = 10 while( (f(ref i) -1) <=10 ) {

最近我遇到了这个问题

int i = 10;
while (i++ <= 10) {
    i++;
}
System.out.print(i);
inti=10;
而(i++
  • i=10。看看i,与10相比

  • i=10.10这是另一种方法,我可以把我的头绕在这上面。 设
    f(refi)
    是一个函数,它通过引用接受i并将其值增加1。因此
    f(refi)=i+1

    现在我们有了
    f(refi)
    ,上面的代码可以写成

    int i = 10
    while( (f(ref i) -1) <=10 )
    {
       f(ref i);
    }
    

    因此i=13。

    您认为答案应该是什么,为什么?postincrement运算符在后面(或“post”)应用它出现在其中的表达式;但在对任何其他表达式求值之前。这很棘手。您可能会认为答案是12。为什么?因为关系条件求值和循环的分支可能被假设为原子的。显然不是,但这不是一个非理性的假设。很难想象Java“存储”增量操作,并在计算关系条件之后,但在分支出循环之前“插入”它。我想知道在汇编/机器语言级别上,由此产生的代码是什么样子。相反,这可以归结为将关系条件的计算存储在布尔值(位/字节?)中,执行增量操作,然后对存储的布尔值执行分支if操作。谢谢,我错过了while循环中增量的最后一步。
    while(11 - 1 <= 10) {12}
    while (13 -1 <= 10) -> break;