3

Java 解析器如何处理模棱两可的一元运算符?

例如,假设您在int x某处声明,+--x是完全有效的代码。---x理论上也是有效的,但是编译器会抛出错误。同样,+~~~~~~+--x被接受,但~~~~~~++--x即使它们都可以被解析为有效的表达式,也不能接受。

据我所知,语法是模棱两可的,所以必须在标记化过程中处理,但我找不到任何解释它的东西。

4

2 回答 2

3

---x是模棱两可的,因为它可能意味着-(--x)or--(-x)-(-(-x))while+--x是明确的,因为没有+-(-x)可能。

于 2013-02-21T02:04:02.223 回答
3

正如 Stephen P 所暗示的那样,一元运算符在 Java 中从右到左分组,这意味着这些表达式是模棱两可的,因为不同的运算符可以向右分组。有关一元运算符的规则,请参阅Java 7 规范的第 15.15 节。

编辑

在某种程度上,我认为您已经回答了自己的问题。似乎模棱两可的表达式(例如 ---x)会导致编译错误,因为编译器不知道您想要它做什么。在这些情况下,程序员需要通过使表达式更具体来解决歧义——例如,通过添加括号来消除歧义。

于 2013-02-21T02:14:54.277 回答