以下代码的执行顺序是什么?
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
块。
如果hash
,s
和right
是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/