我想知道post和pre的递增和递减操作。
我知道在Java优先级中post operator是high,associativity是left-to-right.while,pre运算符的结合性是right-to-left

但是我的代码显示了我不想要的结果-
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
}
}发布于 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中找到了关于表达式求值的一个很好的答案,请使用:)
发布于 2015-05-27 17:39:35
System.out.println(--count*count++*count++);=2*2*3= 12
count = 3;
System.out.println(--count*++count*++count) = 2*3*4 = 24
count = 3;
System.out.println(-- count*count++);=2*2=4
预增/减
++/-- X首先递增/递减,然后执行该操作。
后递增/递减
X ++/--首先完成操作,然后递增/递减。
发布于 2015-05-27 17:40:26
我选第一个。
System.out.println(--count*count++*count++);//out put is 12 expected 48
2 * 2 * 3 = 12
pre * post * posthttps://stackoverflow.com/questions/30478539
复制相似问题