根据这张 Java 运算符优先级和关联性表,成员访问的优先级高于new运算符。
但是,给定一个类myClass和一个非静态成员函数myFunction,以下代码行是有效的:
new myClass().myFunction();
如果.是之前评估过new的,这行怎么执行?换句话说,为什么不需要括号?
(new myClass()).myFunction();
我的猜测是,由于()与 共享优先级.,因此myClass()首先评估 ,因此编译器甚至在评估new关键字之前就知道myClass正在调用具有零参数的构造函数。但是,这似乎仍然暗示第一行应该与 相同new (myClass().myFunction());,但事实并非如此。