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