java 中包含括号和 int 的表达式中的优先级

Precedence in expression including parentheses and int cast in java

我的代码中有以下表达式

int n = ((int) Math.sqrt(4 * 4 + 5) - 1) / 2;

谁能告诉我计算表达式的优先级?

从逻辑上讲,我将按以下方式评估表达式:

  1. 4 * 4 + 5 = 16 + 5 = 21

  2. Math.sqrt(21) ~ 4.58

  3. 4.58 - 1 = 3.58

  4. (整数) 3.58 = 3

  5. 3 / 2 = 1.5

但是代码的计算结果为 1。

你差不多明白了。唯一的区别(对结果无关紧要)是对演员表进行了评估 在减法之前,您使用的是整数除法:

  1. 4 * 4 + 5 = 16 + 5 = 21
  2. Math.sqrt(21) ~ 4.58
  3. (int) 4.58 = 4 (先施法)
  4. 4 - 1 = 3
  5. 3 / 2 = 1 (integer division)

您建议的顺序是正确的。
关键点是最后一个操作:int 除以 int 的结果也是 int
要解决此问题,两个数字之一应该是 float(或 double):

float n = ((float)(int) (Math.sqrt(4 * 4 + 5) - 1)) / 2;

这样,您将 float 除以 int,结果将是 float。 或者更好:

double n = (Math.sqrt(4 * 4 + 5) - 1) / 2;

因为 Math.sqrt() 转换为 int 没有用。
请注意,第一个操作完全符合您在 Math.sqrt() 轮次中的要求,而第二个操作则没有。