该表达式++a++
由 3 部分组成,通过添加括号突出显示(++(a))++
::
Javadoc 说:
[X] 必须是可转换(第 5.1.8 节)为数字类型的类型的变量,否则会发生编译时错误。[...] [prefix/postfix] 增量表达式的结果不是一个变量,而是一个值。
所以,在你的表达式中++a
,因为a
是一个变量,但结果是一个值,所以(++a)++
不起作用。
a+++++b
不起作用,因为它被编译器解析为((a++)++)+b
,并且正如我们刚刚学到的,X++
需要一个变量。
以这种方式解析它是因为 Java 分词器将使用尽可能多的连续字符来形成有效的运算符。
现在,如果您添加空格或括号,它可以工作,具体取决于您希望该表达式执行的操作。以下都是一样的:
(a++)+(++b)
a+++(++b)
a++ + ++b
a+++ ++b
该表达式someObject.methodReturnsInteger().getClass()
称为“方法链接”。
这是有效的,因为.
它是一个左关联方法调用运算符,并且.
just 左边的值必须是一个对象(或静态方法调用的类,但让我们跳过它)。
所以表达式解析如下:
( someObject . methodReturnsInteger() ) . getClass()
第一个.
有效,因为someObject
是一个对象。第二个.
有效,因为括号表达式的结果是一个对象。
方法链非常常见,在使用构建器模式时非常好,例如
String s = new StringBuilder()
.append("Hello ")
.append(person.getFirstName())
.append(", please say hello to your father, ")
.append(person.getFather().getFirstName())
.append(".")
.toString();