Java代码解释++i和i++的五个主要区别

简介: 本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。

上结论:

  1. 作为独立语句时,两者没有区别
  2. 在赋值表达式中,i++返回原值,++i返回新值
  3. 在复杂表达式中的计算顺序不同
  4. 在循环中的使用(虽然结果相同)
  5. 通过Counter类模拟了两种递增操作的内部实现原理

有错误欢迎批评指正。

这是展示++i(前缀递增)和i++(后缀递增)区别的示例代码:

  1. 作为独立语句时的区别
    int a = 5;
    a++; // 等同于 ++a,都是直接加1
    System.out.println("a = " + a); // 输出: a = 6
    
  2. 在表达式中的区别
    int b = 5;
    int c = 5;
    int resultB = b++; // 先使用b的值(5),再将b加1
    int resultC = ++c; // 先将c加1,再使用c的值(6)
    System.out.println("b = " + b + ", resultB = " + resultB); // 输出: b = 6, resultB = 5
    System.out.println("c = " + c + ", resultC = " + resultC); // 输出: c = 6, resultC = 6
    
  3. 在复杂表达式中的区别
    int i = 5;
    int j = 5;
    System.out.println(i++ + i++); // 输出: 5 + 6 = 11,i最终等于7
    System.out.println(++j + ++j); // 输出: 6 + 7 = 13,j最终等于7
    
  4. 在循环中的区别

    System.out.println("使用i++的循环:");
    for(int x = 0; x < 3; x++) {
         
       System.out.println("当前x值: " + x);
    }
    
    System.out.println("使用++x的循环:");
    for(int x = 0; x < 3; ++x) {
         
       System.out.println("当前x值: " + x);
    }
    

    image.png

  1. 通过自定义类展示区别

    Counter counter = new Counter();
    System.out.println(counter.getAndIncrement()); // 输出当前值0,然后加1
    System.out.println(counter.getValue()); // 输出1
    
    System.out.println(counter.incrementAndGet()); // 先加1,再输出2
    System.out.println(counter.getValue()); // 输出2
    
    class Counter {
         
     private int value = 0;
    
     // 模拟i++
     public int getAndIncrement() {
         
         int temp = value;
         value = value + 1;
         return temp;
     }
    
     // 模拟++i
     public int incrementAndGet() {
         
         value = value + 1;
         return value;
     }
    
     public int getValue() {
         
         return value;
     }
    }
    
相关文章
|
26天前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
312 5
|
1月前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
225 115
|
1月前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
165 98
|
1月前
|
Java 编译器 API
java最新版和java8的区别,用代码展示
java最新版和java8的区别,用代码展示
202 43
|
1月前
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
333 94
|
1月前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
2月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
350 3
|
2月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
238 3
|
2月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
369 0