Java中的算术运算符(初学者问题)

问题描述:

我知道数组运算符具有优先权。然后是二元关节运算符*,/,%。然后+和 - 它们是低优先级。Java中的算术运算符(初学者问题)

但我很困惑,在这个例子中,java将首先解决哪个问题。 如果我们有2个运算符具有相同的优先级,那么将首先在java中使用哪个运算符?

谢谢。

int x = y = -2 + 5 * 7 - 7/2 % 5; 

如果有人能为我解决这个问题,并逐个给我解释一下。因为这总是让我在考试中感到困惑。

+0

它是基于BODMAS规则 - 支架关司乘Addidition减法秩序。 – Mahesh 2011-03-17 11:12:05

+2

如果您不确定运算符的优先级,那么只需添加额外的括号即可。它没有任何缺点,比如让代码变慢,并且在很多情况下使代码更具可读性。 – RoToRa 2011-03-17 11:14:32

+0

非常感谢你们! SOF ROCKS !!!! – 2011-03-17 11:43:24

如果运算符具有相同的优先级,那么它们将从左到右进行评估。

tutorial

当相同的优先级的 运营商出现在同一表达,规则必须 支配后者首先被计算。 除 赋值操作符之外的所有二元运算符都从左到右评估为 ;分配 运营商从右到左进行评估。

在表达,7/2 % 5/%具有相同的优先级,所以从左到右7/2 = 33 % 5 = 3

最高优先级赋予* /%。这里是你的例子细分:

-2 + 5 * 7 - 7/2 % 5 
= -2 + (5 * 7) - (7/2 % 5) 
= -2 + 35 - (3 % 5) 
= -2 + 35 - 3 
= 30 
+1

这正是我想知道的(从左到右!)我在Fortran75和Java之间感到困惑。 TY! – 2011-03-17 11:19:32

y将被赋予值-2 + 5 * 7 - 7/2 % 5。然后x将被分配y的值。

算术表达式会像评估:

-2 + (5 * 7) - ((7/2) % 5) 

Here's Java的运算符优先级的解释。

+1

当使用四空间代码格式时,请勿使用反引号 – HyperNeutrino 2015-06-02 17:15:28

int x = y = -2 + 5 * 7 - 7/2 % 5; 

是相同

int x = y = (-2 + ((5 * 7) - ((7/2) % 5))); 

/*和%(乘法)的具有相同的优先级和它们的关联被左到右。
+和 - (添加剂)具有相同的优先级,并且它们的关联从左到右。乘法运算优于加法运算。

这看起来像你需要阅读的内容:Java Operators Tutorial

阅读教程,然后自己写一个示例程序并进行操作,直到对操作符优先级满意为止。这是学习的最佳方式。

不完全相关,但你可能会发现这一点。它与序列点有关,它是程序中的一些点,它们本质上是编译器确保一切都同步的点。它出现在SO上,因为这个问题是什么

x = x++; // Operator prcedence and/or sequence point problem; 

是做什么的?或者更糟

x[i]=i++ + 1;// sequence point problem 

Why does this go into an infinite loop?

http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html

+0

在Java中,这里没有问题,因为左操作数总是在正确的操作数之前被计算(或者至少,程序必须具有与以这种方式完成的结果相同的结果)。 – 2011-03-17 12:32:18

+0

看看第一个链接“为什么会进入无限循环?”。它是Java代码 的示例,而(x Jaydee 2011-03-17 12:57:39

+0

我应该提到序列点问题并没有真正涉及到java,它是更多的C/C++,但是Java中的评估顺序并不总是很明显。所以在这方面你是对的。 – Jaydee 2011-03-17 13:12:58