Java 三元运算符结合性问题

您所在的位置:网站首页 java三元运算符为什么是从右向左输入 Java 三元运算符结合性问题

Java 三元运算符结合性问题

2024-07-14 13:57| 来源: 网络整理| 查看: 265

表达式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;

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3