Java 三元运算符结合性问题 |
您所在的位置:网站首页 › java三元运算符为什么是从右向左输入 › 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; 若是哪里有理解错误的或写错的地方,望各位读者评论或者私信指正,不胜感激。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |