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