int i=1; //i=1
int j=i++; //i=2,j=1
if((i>++j)&&(i++==j)){ //if((1>2)&&(1==2)){
i+=j;
} if()中执行i>++j完i=1,j=2,执行i++==j相对于1==2;比较完之后i才加1,i=3
int j=i++; //i=2,j=1
if((i>++j)&&(i++==j)){ //if((1>2)&&(1==2)){
i+=j;
} if()中执行i>++j完i=1,j=2,执行i++==j相对于1==2;比较完之后i才加1,i=3
2
2真是奇怪,谁说没有执行++j?
分析如下:
public class Foo{
public static void main(String[] args){
int i=1; //i=1
int j=i++; //j=1,i=2
if((i>++j)&&(i++==j)){ //先执行++j,j=2,此时比较:if (2>2) && ...,这里是短路与,当(2>2)为假时不会再计算(i++==j)与(i++==j),所以跳过i+=j语句.
i+=j;
}
System.out.println(i); //i=2
System.out.println(j); //j=2
}
}这里或许短路与(&&)与短路或(||)是关键吧。