i++ 、 ++i和i+=1、i=i+1 的问题

一时失言乱红尘 2022-02-17 16:25 500阅读 0赞

逻辑运算中,关于i++ 、 ++i和i+=1、i=i+1 等这类问题是也笔试必考内容之一,基础中的基础。如果不会,那就已经可以看出你个人的基础水平了。虽然看上去简单,但是不懂原理是不行的。只有了解原理才能记忆最深

i++ 和 ++i 的区别:

i++:先赋值,在相加,
++i:先相加,在赋值

实战以下,看以下代码

  1. public class Test {
  2. public static int print1() {
  3. int i = 0;
  4. i++;
  5. return i++;
  6. }
  7. public static int print2() {
  8. int i = 0;
  9. i++;
  10. return ++i;
  11. }
  12. public static void main(String[] args) {
  13. System.out.println(print1());
  14. System.out.println(print2());
  15. int i=0;
  16. System.out.println(i++);
  17. System.out.println(++i);
  18. }
  19. }

执行结果为:1,2,0,2;
我们获取以下方法执行时的指令集

  1. public static int print1() {
  2. int i = 0;
  3. return i++;
  4. }
  5. public static int print2() {
  6. int i = 0;
  7. return ++i;
  8. }

查看汇编指令如下

在这里插入图片描述

  1. public static int print1();
  2. Code:
  3. 0: iconst_0 //将int类型常量0压入栈
  4. 1: istore_0 //将int类型值存入局部变量
  5. 2: iload_0 //第一个int型局部变量进栈
  6. 3: iinc 0, 1 //把一个常量值加到一个int类型的局部变量上,0 表示局部变量索引
  7. 6: ireturn //将操作数栈栈顶的值返回个此方法的调用者
  8. LineNumberTable:
  9. line 5: 0
  10. line 6: 2
  11. public static int print2();
  12. Code:
  13. 0: iconst_0 //将int类型常量0压入栈
  14. 1: istore_0 //将int类型值存入局部变量
  15. 2: iinc 0, 1 //把一个常量值加到一个int类型的局部变量上,0 表示局部变量索引
  16. 5: iload_0 //第一个int型局部变量进栈
  17. 6: ireturn //将操作数栈栈顶的值返回个此方法的调用者
  18. LineNumberTable:
  19. line 5: 0
  20. line 6: 2
  • iload_0 指将整型指存入操作数栈
  • iinc 用于实现局部变量的自增操作。在所有字节码指令中,只有该指令可直接用于操作局部变量。
  • ireturn 是将操作数栈栈顶的值返回个此方法的调用者

i=i++到底是怎么执行的

  1. public class Inc {
  2. public static void main(String[] args) {
  3. Inc inc = new Inc();
  4. int i = 0;
  5. inc.fermin(i);
  6. i= i ++;
  7. System.out.println(i);
  8. }
  9. void fermin(int i){
  10. i++;
  11. }
  12. }
  13. //答案是0; inc.fermin(i); 是一个干扰项,考值传递还是引用传递

i=i+1 和 i+=1 的区别

i+=1 会进行自动进行类型转换,相当于如下效果:

  1. short i =1;
  2. i=(short) (i+1);

发表评论

表情:
评论列表 (有 0 条评论,500人围观)

还没有评论,来说两句吧...

相关阅读

    相关 i=i+1i+=1 区别

    满脑子的黑人问号有没有,有的话点一波关注:) 起初我也是一脸蒙逼,随着知识的积累,有了新的思考,记录下来仅供参考。  从执行效率上来说,i+=1更优 我们先来看一段代