Java 这一后期增量何时发生?
我面前有一段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
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
语句中无关;这仅仅是表达式求值
该操作在中明确说明
二元运算符的左侧操作数似乎已完全求值
在计算右操作数的任何部分之前
请避免在问题中使用图像显示代码。相反,把代码的文本放到你的问题中。求你了。为什么?可搜索下一个有类似问题的人。