代码之家  ›  专栏  ›  技术社区  ›  Andrew Keller

Java算符优先比较

  •  8
  • Andrew Keller  · 技术社区  · 15 年前

    Java是否有一个比较两个操作符优先级的内置方法?例如,如果我有一个char“/”和一个char“+”,我是否可以调用一个方法来比较这两个方法,如果第一个方法大于第二个方法(例如,true),则返回true/false?

    4 回复  |  直到 15 年前
        1
  •  13
  •   Community CDub    8 年前

    运算符优先于您定义的方式,而公共的则不是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
    

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

    参见:

        2
  •  2
  •   MeBigFatGuy    15 年前

    不,你最好找一个第三方jar来进行语言解析,看看他们是否有这样的方法。

        3
  •  0
  •   gmhk    15 年前

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

        4
  •  0
  •   user207421    15 年前

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