点知识_Java三目运算符

三目运算符在我们的代码中经常使用,但是却有一个很容易犯的错误。

首先看这个程序:

public class TestAlgorithm {

    public static void main(String[] args) {
        int left = 2;
        int right = 0;
        int value = Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);
        System.out.println(value);
    }
}

很简单的程序,那么问题来了,它打印的值是多少?

1吗?

很可惜,不是。答案是-1

这里将程序改写一下大家就知道为什么了。

public class TestAlgorithm {

    public static void main(String[] args) {
        int left = 2;
        int right = 0;
        int value = Math.abs(left - right) > 1 ? -1 : (1 + Math.max(left, right));
        System.out.println(value);
    }
}

很清楚了吧,至于为什么是这样,这就牵扯到Java运算符优先级了,说到这个,我能想起的只有括号优先级最高,等号优先级最低,其它的都忘了…所以我从网上特意找了张表,来说明这个问题。
运算符优先级表
优先级越高,便先开始运算,我们从表中可以看到,三目运算符的优先级只比等号高一级,远远低于加号,所以前面的’bug’就很清楚了,它先运算后面的加号,将值做为一个整体参与到三目运算符的判断中来,而不是我们想的那样,先三目运算符,再加号。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Viiou/article/details/81592643
个人分类: 点知识
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭