class Test {
public static void main(String[] args) {
int a = 3;
int b = 4;
if ((a>b&(a++)>b&&(--b)<a)|(b++)<=(a--)) {
System.out.println("判断结果为true, a=" + a + ",b=" + b);
} else {
System.out.println("判断结果为false, a=" + a + ",b=" + b);
}
}
}
上面这个例子很容易出错。对于true和false我们可以判断出来(不管思路是对的还是错的,这里的答案都是true),但是对于a和b的值来说,我们第一反应就是看a和b自增或自减了多少次,然后就可以很快的得出结果,但是我们却没有注意到&和&&。 这里我简单说下&和&&的区别。&&运算符是当第一个表达式的值是false时,它将不会往后面计算;&运算符是不管第一个表达式的值是true还是false,它都会继续运算。 所以在上面的例子中,(a++)>b&&(--b)<a第一个表达式的值是false,所以后面的表达式将不会计算,因此最终结果应该是:a=3,b=5。
关于&和&&的一道容易出错的小例题
最新推荐文章于 2022-09-07 20:38:27 发布