Java如何100%-40 w?rk?

SPi*_*dey -9 java operators modulo unary-operator

System.out.println(100% - 40);
Run Code Online (Sandbox Code Playgroud)

请解释编译器解决此问题的步骤。

就像我所了解的那样,%是一个需要两个操作数才能工作的运算符,但是在这种情况下,它如何接受另一个像“-”这样的运算符呢?

And*_*lko 5

此处的格式对于正确阅读非常重要。

System.out.println(100 % -40);
Run Code Online (Sandbox Code Playgroud)

要么

System.out.println(100 % (-40));
Run Code Online (Sandbox Code Playgroud)

然后,很明显有两个运算符:余数运算符%和一元减运算符-

此外,运算符优先级表解释了为什么即使没有圆括号,该异常表达也能正常工作。

??????????????????????????????????????????????????
?   Operators    ?          Precedence ?         ?
??????????????????????????????????????????????????
? unary          ? ++expr --expr +expr -expr ~ ! ?
? multiplicative ? * / %                         ?
??????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)