Java 这一后期增量何时发生?

Java 这一后期增量何时发生?,java,if-statement,increment,Java,If Statement,Increment,我面前有一段Java代码: private static int[] generateSparseArray(int value) { int[] array = new int[getBound(value)]; for (int j = 1; j < value; j++) { do { array[j++] = value; if ((value++ > 3 || value < 4) &am

我面前有一段Java代码:

private static int[] generateSparseArray(int value) {
    int[] array = new int[getBound(value)];
    for (int j = 1; j < value; j++) {
        do {
            array[j++] = value;
            if ((value++ > 3 || value < 4) && (j > 0)) {
                ++j;
                break; 
            }
        } while (value < 4); 
    }
    return array; 
}

private static int getBound(int value) { /** ... */ }
private static int[]generateSparserray(int值){
int[]数组=新int[getBound(value)];
对于(int j=1;j3 | |值<4)和&(j>0)){
++j;
打破
}
}而(值<4);
}
返回数组;
}
私有静态int getBound(int值){/**…*/}
我不确定在专门检查这段布尔表达式之后,它是否会增加“value”,或者它是否会在if语句的整个布尔表达式之后增加


你们怎么看?

后增量是在计算
值之后立即进行的,而不是在计算整个
if
条件之后

查看
(值+++>3 | |值<4)
value
3

  • 已计算且为
    3
    ,因此条件的第一部分为
    false
  • 紧接着
    增加到
    4
  • 由于OR表达式的第一部分为false,因此对第二部分求值,而不是短路
  • 现在
    value
    已经是
    4
    ,条件的第二部分也是
    false
您可以通过查看精简版本来验证这一点

public static void main(String[] args) {
    int a = 3;
    if((a++ > 3 || a < 4) && verify(a)) {

    }
}

static boolean verify(int a) {
    System.out.println(a);
    return true;
}
publicstaticvoidmain(字符串[]args){
INTA=3;
如果((a++>3 | | a<4)和验证(a)){
}
}
静态布尔验证(INTA){
系统输出打印项次(a);
返回true;
}

方法
verify
从不被调用,也不会打印任何内容,因为
(a++>3 | | a<4)
false
并且会发生短路。

这与处于
if
语句中无关;这仅仅是表达式求值

该操作在中明确说明

二元运算符的左侧操作数似乎已完全求值 在计算右操作数的任何部分之前


请避免在问题中使用图像显示代码。相反,把代码的文本放到你的问题中。求你了。为什么?可搜索下一个有类似问题的人。