根据此Java运算符优先级和结合性表,成员访问比
但是,对于一个类
new
运算符具有更高的优先级。但是,对于一个类
myClass
和一个非静态成员函数myFunction
,以下代码行是有效的:
new myClass().myFunction();
如果在new
之前先计算.
,那为什么不需要括号就可以执行这行代码呢?
(new myClass()).myFunction();
我猜测由于()
和.
具有相同的优先级,所以先计算myClass()
,因此编译器在评估new
关键字之前就知道正在调用零个参数的myClass
构造函数。然而,这仍然似乎意味着第一行应该与 new (myClass().myFunction());
完全相同,但事实并非如此。