使用前缀增量运算符和括号优先级的数学表达式的澄清

给出以下代码:


int p,k=8;

p=k*(++k-8);

System.out.println(p);

什么时候++k被评估k=9,然后就变成了k*(9-8)给予9*1


int p,k=8;

p=(++k-8)*k;

System.out.println(p);

但这给出了9作为输出


明月笑刀无情
浏览 138回答 2
2回答

蛊毒传说

这是您的代码编译的类文件:   int k = 8;    byte var10000 = k;    int k = k + 1;    int p = var10000 * (k - 8);    System.out.println(p); 

料青山看我应如是

你有一个乘法left side:  k   right side: (++k-8)就像您正确说的那样,大括号优先。但是,您的程序仍然“从左到右”运行。因此,首先评估左侧,即k = 8。然后评估右侧,即(++k-8) = 1。现在我们已经确定了双方,可以将它们相乘:8*1 = 8。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java