首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对post++和--pre运算符的操作

对post++和--pre运算符的操作
EN

Stack Overflow用户
提问于 2015-05-27 17:35:38
回答 4查看 368关注 0票数 1

我想知道postpre的递增和递减操作。

我知道在Java优先级中post operatorhighassociativityleft-to-right.while,pre运算符的结合性是right-to-left

Oracle Java Tutorial

但是我的代码显示了我不想要的结果-

代码语言:javascript
复制
public class Bunnies { 
    static int count = 3; 
    public static void main(String[] args) { 

        System.out.println(--count*count++*count++);//out put is 12 expected 48
        //associativity of post is higher so should be evaluated like this-

        //--count*3**count++  count is 4 now
        //--count*3*4         count is 5 now
        //4*3*4=48


        count = 3;
        System.out.println(--count*++count*++count); //out put is 24 expected 120
        //associativity of pre  is right to left so should be evaluated like this-

        //--count*++count*4      count is 4 now
        //--count*5*4            count is 5 now
        //4*5*4=120


        count = 3;
        System.out.println(-- count*count++);// out put is 4 expected 9

        //--count*3      count is 4 now
        //3*3=9 
         }
}
EN

回答 4

Stack Overflow用户

发布于 2015-05-27 17:55:24

子表达式的求值顺序与结合性和优先级无关。

乘法的子表达式是从左到右计算的,所以在执行--count*count++*count++时,先计算--count,然后计算count++,最后计算count++

由于先对前运算符进行求值,因此--count将在求值之前递减。以同样的方式,由于post操作符最近被计算,count++将在其计算之后递增。

优先级只帮助编译器创建正确的抽象语法树。

例如,在执行++count*2时,编译器使用优先级来知道表达式是(++count)*2而不是++(count*2)。同样,在执行++count*count--时,表达式是(++count)*(count--),而不是(++(count * count))--或其他什么。但是,在乘法计算期间,在count--之前评估++count

希望这能对您有所帮助:)

我刚刚在C#和Java here中找到了关于表达式求值的一个很好的答案,请使用:)

票数 3
EN

Stack Overflow用户

发布于 2015-05-27 17:39:35

代码语言:javascript
复制
System.out.println(--count*count++*count++);

=2*2*3= 12

代码语言:javascript
复制
count = 3;
System.out.println(--count*++count*++count) 

= 2*3*4 = 24

代码语言:javascript
复制
count = 3;
System.out.println(-- count*count++);

=2*2=4

预增/减

++/-- X首先递增/递减,然后执行该操作。

后递增/递减

X ++/--首先完成操作,然后递增/递减。

票数 1
EN

Stack Overflow用户

发布于 2015-05-27 17:40:26

我选第一个。

代码语言:javascript
复制
System.out.println(--count*count++*count++);//out put is 12 expected 48
                    2     *    2  * 3 = 12
                    pre   * post  * post
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30478539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档