您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

x = x + 1和x ++在实现上的差异

x = x + 1和x ++在实现上的差异

我的教授最近说,尽管x = x + 1和x ++显然会给出相同的结果

我想你的教授也许是故意 x-after x = x + 1x++will 的价值是相同的。只是重新措辞,因为它似乎在解释问题时造成了混乱。

好的,尽管的值x将相同,但是它们是不同的运算符,并且在字节码中使用不同的JVM指令。x + 1使用iadd指令,而x++使用iinc指令。尽管这取决于编译器。编译器可以自由地对特定操作使用不同的指令集。我已经针对javac编译器进行了检查。

对于 eclipse 编译器,来自@Holger的以下注释之一:

我只是用eclipse测试了它,并iinc为两个表达式生成了它。所以我发现一个编译器产生相同的指令

您可以使用javap命令检查字节码。让我们考虑以下类:

class Demo {
    public static void main(String[] args) {
        int x = 5;

        x = x + 1;
        System.out.println(x);

        x++;
        System.out.println(x);
    }
}

编译上面的源文件,并运行以下命令:

javap -c Demo

代码将被编译为以下字节码(仅显示main方法):

 public static void main(java.lang.String[]);
   Code:
      0: iconst_5
      1: istore_1
      2: iload_1
      3: iconst_1
      4: iadd
      5: istore_1
      6: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      9: iload_1
     10: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
     13: iinc          1, 1
     16: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
     19: iload_1
     20: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
     23: return
其他 2022/1/1 18:27:39 有515人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶