Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
Java 谁能确切地解释一下后增量和前增量是什么,因为据我所知,我';我只是越来越糊涂了?_Java_If Statement_Post Increment_Pre Increment - Fatal编程技术网

Java 谁能确切地解释一下后增量和前增量是什么,因为据我所知,我';我只是越来越糊涂了?

Java 谁能确切地解释一下后增量和前增量是什么,因为据我所知,我';我只是越来越糊涂了?,java,if-statement,post-increment,pre-increment,Java,If Statement,Post Increment,Pre Increment,这不应该是,11是好的,21是坏的吗?因为,在i++的情况下,如果值10等于i,则首先对其求值,然后再递增 int i = 10; if(i++ == i){ System.out.println(i + " is good"); } else{ System.out.println(i + " is bad"); } int j = 20; if(++j == j){ System.out.println(j + " is good&q

这不应该是,11是好的,21是坏的吗?因为,在i++的情况下,如果值10等于i,则首先对其求值,然后再递增

int i = 10;
if(i++ == i){
 System.out.println(i + " is good");
}
else{
 System.out.println(i + " is bad");
}

int j = 20;
if(++j == j){
 System.out.println(j + " is good");
}
else{
 System.out.println(j + " is bad");
}
输出:11是坏的
i++==i
中,21是好的,因为
i
已递增,所以左侧的计算结果为10,递增
i
,右侧的计算结果为11。因此,平等是错误的


++j==j
中,左手边递增
j
并计算为21,右手边计算为21,因为
j
已递增。因此,这个等式是正确的。

@khelwood的答案是正确的,就其本身而言,但并没有按照要求准确地告诉您前增量和后增量是什么

在具有这种特性的语言中,包括Java,都有“表达式”
x+y
是一个表达式。
++i
i++
也是如此

表达式
++i
的计算结果比计算表达式时
i
的值多出一个。作为副作用,
i
的值在计算表达式时也设置为该值

表达式
i++
的计算结果与表达式计算时的值相同。作为一种副作用,
i
的值在对表达式求值后增加

我觉得这有一段历史很有趣;它在某种程度上解释了操作符存在的原因,尽管我不认为它真的有助于理解它,所以除非你对历史感兴趣,否则你可以跳过它

C语言是由贝尔实验室的几位工程师发明并首先在数字设备公司(又名DEC)制造的计算机上实现的。这些计算机是在个人计算机出现之前最早的小型计算机之一。在他们的一些型号的机器语言中,他们的指令通过将一些内部寄存器相加来访问内存。他们构建了机器代码,这样一个寄存器在访问内存后可以递增,这样它就可以指向下一个内存位置

在当时的小型计算机世界中,执行速度和代码大小都是宝贵的,因此能够以最少的指令和机器代码速度编写一个紧密的循环来遍历内存是可取的。因此,DEC的计算机——包括他们非常流行的PDP-11系列——具有post和pre递增和递减作为“寻址模式”,机器代码可以通过这些模式访问内存


实现C语言的人,过去是而且现在仍然是一个结构化的汇编程序,而不是一种高级语言,希望利用C本身的这种机器级优势。这就是为什么语言有前后递增和递减,现在必须在每个支持该语言的编译器中实现。

示例说明:

int i=10;
System.out.printf("Value of i during post-incrementing %d \n",i++);
System.out.printf("Value of i after post-incrementing %d \n",i);
System.out.printf("Value of i during pre-incrementing %d \n",++i);
System.out.printf("Value of i after pre-incrementing %d \n",i);
在后递增中,该值在其求值后递增。当您在求值期间写入
i++
时,它首先使用先前的值i,即10,但在计算
i++
后,i现在等于11。所以在语句
if(i++==i)
中,它的意思是
if(10==11)
,这将返回false

在预递增中,该值在计算之前递增。当你写
++i
的时候,首先我会增加到21,然后它就被使用了。这与编写if(21==21)相同,它将返回true

更好理解的新示例:

int i=10;
System.out.printf("Value of i during post-incrementing %d \n",i++);
System.out.printf("Value of i after post-incrementing %d \n",i);
System.out.printf("Value of i during pre-incrementing %d \n",++i);
System.out.printf("Value of i after pre-incrementing %d \n",i);
输出:

增量后10期间i的值
后增量11后的i值
在预递增12期间i的值
预加12后的i值