Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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/3/wix/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
Java中的后增量_Java_Post Increment - Fatal编程技术网

Java中的后增量

Java中的后增量,java,post-increment,Java,Post Increment,在这个代码段中 [1]int i=0; [2]i = i++; [3]System.out.println(i); 在第2行中,首先执行表达式(将0分配给i),然后将值递增1 在System.out.println(i)中,我得到的答案是0而不是1。有人能解释一下原因吗?i++不生成变量,而是一个值 i++生成0 然后i增加到1 然后将0分配给i 摘要:运算符的优先级可能不是您所期望的。或者至少你可能误解了i的实际增量发生在哪里。向人们展示i++的使用可以分为两行是很正常的,其中后面的一行正

在这个代码段中

[1]int i=0;
[2]i = i++; 
[3]System.out.println(i);
在第2行中,首先执行表达式(将0分配给i),然后将值递增1


System.out.println(i)
中,我得到的答案是0而不是1。有人能解释一下原因吗?

i++不生成变量,而是一个值

  • i++生成0

  • 然后i增加到1

  • 然后将0分配给i


  • 摘要:运算符的优先级可能不是您所期望的。或者至少你可能误解了i的实际增量发生在哪里。向人们展示i++的使用可以分为两行是很正常的,其中后面的一行正在进行增量-这并不总是正确的。它发生在赋值运算符之前。

    @chathura2020:转到此链接。它是关于s的

    在单个表达式中多次修改同一变量时,序列点也会起作用。一个经常被引用的例子是C表达式i=i++,它显然既给i赋值,又增加i。i的最终值是不明确的,因为根据表达式求值的顺序,增量可能发生在赋值之前、之后或与赋值交错。特定语言的定义可能指定一种可能的行为,或者简单地说该行为是未定义的。在C和C++中,评估这样的表达式产生不确定的行为。


    (对于java来说,情况并非如此)

    赋值首先保存i的值,然后将i设置为其值加1,最后将i重置回其原始值。种类:

    int temp=i;
    i=i+1;
    i=temp;
    

    您的答案对于C是正确的,但是对于Java是不正确的。语句
    i=i++始终有一个。请修改您的答案。@Nayuki Minase:谢谢您的评论。那么,原始问题的答案是什么?对同样的问题有解决方案。Java中没有序列点。评估顺序(etc)在Java中有很好的定义。