gpt4 book ai didi

java - 数学表达式的正确优先级是什么

转载 作者:太空狗 更新时间:2023-10-29 23:03:44 28 4
gpt4 key购买 nike

Java 表达式中正确的数学运算顺序是什么:

    a + b  * c / ( d - e )
1. 4 1 3 2
2. 4 2 3 1

我知道这两个答案的结果是一样的。但我想完全理解java编译器逻辑。在这个例子中首先执行什么 - 乘法或括号中的表达式?指向包含该内容的文档的链接会很有帮助。

更新:谢谢你们的回答。你们中的大多数人写的是首先计算括号中的表达式。在查看了 Grodriguez 提供的引用资料后,我创建了一些小测试:

int i = 2;
System.out.println(i * (i=3)); // prints '6'
int j = 2;
System.out.println((j=3) * j); // prints '9'

谁能解释为什么这些测试会产生不同的结果?如果首先评估括号中的表达式,我会期望得到相同的结果 - 9。

最佳答案

到目前为止,几乎每个人都将求值顺序与运算符优先级混淆了。在 Java 中,优先规则使表达式等同于以下内容:

a + (b  * c) / ( d - e )

因为 */ 具有相同的优先级并且是左关联的。

评估顺序严格定义为left hand operand first, then right, then operation (|| 和 && 除外)。所以求值顺序是:

  a
b
c
*
d
e
-
/
+

评估顺序在页面下方。缩进反射(reflect)语法树的结构

编辑

回应 Grodriguez 的评论。以下程序:

public class Precedence 
{
private static int a()
{
System.out.println("a");
return 1;
}
private static int b()
{
System.out.println("b");
return 2;
}
private static int c()
{
System.out.println("c");
return 3;
}
private static int d()
{
System.out.println("d");
return 4;
}
private static int e()
{
System.out.println("e");
return 5;
}

public static void main(String[] args)
{
int x = a() + b() * c() / (d() - e());
System.out.println(x);
}
}

产生输出

a
b
c
d
e
-5

这清楚地表明乘法是在减法之前执行的。

关于java - 数学表达式的正确优先级是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023673/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com