以下代码的执行顺序是什么?

 if (hash[s.charAt(right++)]-- >= 1)


以我的理解

 1. hash[s.charAt(right)] >= 1
 2. hash[s.charAt(right)]--
 3. right++;


谢谢!!!!

最佳答案

if (hash[s.charAt(right++)]-- >= 1)的执行顺序为:


读取hash的值(a)
读取s的值(b)
读取right的值(c)
right的增量值
致电b.charAt(c)(d)
读取a[d]的值(e)
递减值a[d]
读取常量1(f)
如果if,则跳过e < f块。


如果hashsright是3个局部变量,则if语句的字节码为:

 1: aload_1
 2: aload_2
 3: iload_3
 4: iinc          3, 1
 5: invokevirtual #21                 // Method java/lang/String.charAt:(I)C
 6: dup2
    iaload
 7: dup_x2
    iconst_1
    isub
    iastore
 8: iconst_1
 9: if_icmplt     99




更新

效果与您写的相同:

boolean cond = hash[s.charAt(right)];
hash[s.charAt(right)]--;
right++;
if (cond) {


值仅被读取一次,并且charAt()调用和索引查找仅发生一次。

关于java - Java中i++的执行顺序是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46210932/

10-10 06:44