Java运算符优先级比较

时间:2010-04-30 03:55:06

标签: java

java是否有内置方法来比较两个运算符的优先级?例如,如果我有一个char'/'和一个char'+',我可以调用一个比较两者的方法,如果第一个大于第二个,则返回true / false(例如true)?

4 个答案:

答案 0 :(得分:13)

运算符优先级的定义方式虽然常见,但并不是Java语言应该识别的普遍事实。因此不,Java语言本身没有这样的比较。编写自己的文章当然很容易:

int precedenceLevel(char op) {
    switch (op) {
        case '+':
        case '-':
            return 0;
        case '*':
        case '/':
            return 1;
        case '^':
            return 2;
        default:
            throw new IllegalArgumentException("Operator unknown: " + op);
    }
}

然后给出char op1, op2,只需比较precedenceLevel(op1), precedenceLevel(op2)

如果您的运营商很少,您也可以使用if-else或三元运算符代替switch。另一个选择是使用enum Operator implements Comparable<Operator>,但根据你正在做的事情,也许像ANTLR这样的解析工具会更好。


请注意,上面的示例将^置于最高优先级,这意味着它可能用于表示取幂。事实上,Java语言中的^是独占的,或者它的优先级低于+

    System.out.println(1+2^3);   // prints 0
    System.out.println(1+(2^3)); // prints 2
    System.out.println((1+2)^3); // prints 0

这只是表明这些符号的优先级甚至语义不是普遍的真理。

另见:

答案 1 :(得分:2)

没有。你最好的办法是找到一个可以进行语言分析的第三方jar,看看他们是否有类似的方法。

答案 2 :(得分:0)

您可以编写自己的API,执行此操作并将其作为参数发送,并为您提供结果。

答案 3 :(得分:0)

我很困惑你为什么认为在运行时需要这些信息。在我使用的每种语言中,包括代数和英语,运算符优先级是预定义的。