在Java中调用新对象的方法而不带括号:操作顺序违规?
2022-09-01 04:36:49
根据此 Java 运算符优先级和关联性表,成员访问的优先级高于运算符。new
但是,给定一个类和一个非静态成员函数,以下代码行是有效的:myClass
myFunction
new myClass().myFunction();
如果之前计算过,这行怎么能执行呢?换句话说,为什么不需要括号?.
new
(new myClass()).myFunction();
我的猜测是,由于与 共享优先级,因此首先计算 ,因此编译器甚至在计算关键字之前就知道正在调用具有零参数的构造函数。但是,这似乎仍然意味着第一行应该与 相同,但事实并非如此。()
.
myClass()
new
myClass
new (myClass().myFunction());