Приоритет оператора в том виде, как вы его определили, хотя и является обычным явлением, не является универсальной истиной, которую должен распознавать язык 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
Это просто показывает, что приоритет и даже семантика этих символов НЕ являются универсальными истинами.
Смотри также: