关于&和&&的一道容易出错的小例题

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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值