JLS v7 第18章中的语法似乎与文档中其他地方的结构不同,但对我来说似乎存在差异.特别是在第15章中,规则是:
RelationalExpression:
ShiftExpression
RelationalExpression < ShiftExpression
RelationalExpression > ShiftExpression
RelationalExpression <= ShiftExpression
RelationalExpression >= ShiftExpression
RelationalExpression instanceof ReferenceType
Run Code Online (Sandbox Code Playgroud)
这使得foo instanceof Bar一个RelationalExpression(因此也就是一个EqualityExpresson)可以在EqualityExpression规则中用作LHS,该规则产生foo instanceof Bar == false一个EqualityExpression.
但是在查看第18章中的语法时,他们对它进行了简化:
Expression2:
Expression3 [Expression2Rest]
Expression2Rest:
{ InfixOp Expression3 }
instanceof Type
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,这意味着我们可以将Expression3二进制运算符链接在一起,或者我们可以检查一个类型Expression3.具体现在foo instanceof Bar是一个Expression2,但我没有看到使用Expression2平等比较的LHS 是有效的.
我是否错过了第18章的语法中的某些内容foo instanceof Bar == false?请注意,根据第15章中的规则并根据我的编译器,它是一个有效的表达式.