java - 一个变量可以在一条语句中递增多少次?

标签 java increment post-increment pre-increment

我目前正在阅读 Barry Burd 的 Java For Dummies,并想到了这个小练习。

练习是关于后增量和前增量的。在问题中(请参阅代码)我能够找出所有行的答案(没有编译器的帮助)除了最后一行。根据我目前对后/前增量的了解,这没有意义。

请告知结果如何或为何与我的预期不符。

我尝试初始化并声明一个值为“20”的新变量 (int),然后执行“i = i++ + i++”,但仍然收到相同的结果 (41)。

也尝试了两次 out.println(i),但它仍然打印出 41。

import static java.lang.System.out;

public class Main
{
    public static void main(String[] args) {

        int i = 10;
        out.println(i++); //10(post11)
        out.println(--i); //10(pre11-1)

        --i; //9(pre10-1)
        i--; //9(post8)
        out.println(i); //8
        out.println(++i); //9(pre8+1)
        out.println(i--); //9(post8)
        out.println(i); //8
        i++; //8(post9)
        i = i++ + ++i; //i = 9(post10) + 10(pre9+1) = 19(post20)
        out.println(i);  //20
        i = i++ + i++; //i = 20(post21) + 20(post21) = 40(post42)
        out.println(i); //41 (result copied from compiler)  

    }
}

我希望最后一行打印 42 而不是 41,因为“20”被添加了两次,并且也增加了两次。

最佳答案

i = i++ + i++

计算结果为(如果 i 为 20):

i = 20 + 21

因为第一个 i++ 是一个后置运算符,所以不影响它。但是,它确实会影响 i 的下一次使用。

我将逐步分解:

i =i+++ i++;, i == 20

i =20+ i++, i == 21

i = 20 +i++, i == 21

i = 20 +21, i == 22

i =41

关于java - 一个变量可以在一条语句中递增多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501821/

相关文章:

c++ - 分配递增变量

java - Firestore set() 方法不会将文档插入集合中,除非调用 ApiFuture<WriteResult> 的 get() 方法

java - Java Bootstrap 类加载器是如何加载的?

Java:将两个输入的整数加2

c++ - *p++ += 2 定义明确吗?

c - 在递归中使用后增量

java - 自定义存储库的 Spring Data Solr 优先级

java - Recyclerview 适配器的 notifyDataSetChanged 不更新 RecyclerView

c# - 为什么 x++-+-++x 合法但 x+++-+++x 不合法?

c# - 是否存在在循环中使用 `i <= 2` 代替 `i < 3` 会导致循环行为发生变化的情况?