Java 三元运算符结合性问题

表达式a > b ? b > c ? 1 : 0 : 2
?:是从右向左结合(右结合)的,那么该表达式被被解析为 a > b ? (b > c ? 1 : 0) : 2

上面的是我记忆中学的结合性的理解,但是今天看了一篇博客,执行了一下,让我差点怀疑人生,仔细想了一下,我原先的理解应该没问题,下面我记录一下:
Java中:条件表达式(三目运算符)的结合性是右结合,即自右向左结合
首先心中默算一下n的值,再实际运行一下n的值。

int i = -2;
int n = ++i == 0 ? 99 : i == -1 ? 11 : 22;

答案:n的值为11,怀疑人生~
原问题博客:https://blog.csdn.net/geekdonie/article/details/17173735
按照原博客的解释为:

int n = (++i == 0 ? 99 : i == -1) ? 11 : 22;

也即是按照if else语句执行的,这样解释也没什么毛病,但是和我所理解相冲突啊,细细想了一下,其实是这样的:
其实这个例子应该把其他运算符考虑进来就可以解释了:
(1)int i = -2;
(2)int n = ++i == 0 ? 99 : i == -1 ? 11 : 22;
首先(2)中优先级最高的是++运算符(从右向左),执行++i,设为A;接着是==运算符(从左向右),执行A == 0,设为B结果为false;接着B == -1,结果为true,此时的步骤2为int n = false ? 99 : true ? 11 : 22;现在是?:运算符(从右向左),也就是int n = false ? 99 : (true ? 11 : 22);这样的话n = 11;

若是哪里有理解错误的或写错的地方,望各位读者评论或者私信指正,不胜感激。

你可能感兴趣的:(其他,Java,三元运算符,结合性)