page contents

Java运算符优先级问题

Pack 发布于 2020-01-14 09:02
阅读 507
收藏 0
分类:Java开发

表达式:(a = b) == a

这个好理解就是先进行赋值操作a = b,再进行判断


表达式:a == (a = b)

为何是先进行a == b判断,在执行赋值操作a = b,不是()的优先级最高吗?

181
Pack
Pack

从字节码里可以看出来,例如以下代码


int a = 3;

int b = 2;

System.out.println(a == (a = b));

转成字节码后如下:


       0: iconst_3

       1: istore_1

       2: iconst_2

       3: istore_2

       4: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;

       7: iload_1

       8: iload_2

       9: dup

      10: istore_1

      11: if_icmpne     18

      14: iconst_1

      15: goto          19

      18: iconst_0

      19: invokevirtual #3                  // Method java/io/PrintStream.println:(Z)V

      22: return


7~11行取出a,b,复制后存入a,然后进行比较


       7: iload_1

       8: iload_2

       9: dup

      10: istore_1

      11: if_icmpne     18

运算符的顺序是先(),再==,只是比较的是a和b的原始值

请先 登录 后评论