因此,我创建了一个类,该类允许您选择传入自身的新实例:

public ExampleObject(String name, ExampleObject... exampleObjects) {

}


public static void main(String[] args) {
   ExampleFunction(new ExampleObject("Test", new ExampleObject("Test2")));
}


这将如何执行?外部ExampleObject的构造函数是先调用还是内部调用?

最佳答案

参数的评估由JLS 15.12.4.2描述。

摘录:


  参数表达式(如果有)按从左到右的顺序计算
  对。如果对任何参数表达式的求值完成
  突然之间,那么右边任何参数表达式的任何部分都不会出现
  被评估,并且方法调用突然完成
  出于同样的原因。第j个参数的求值结果
  expression是第j个自变量值,其中1≤j≤n。


将其应用于您的案例,评估顺序为:

ExampleFunction(new ExampleObject("Test", new ExampleObject("Test2")));
- new ExampleObject("Test", new ExampleObject("Test2"))
- - "Test"
- - new ExampleObject("Test2")
- - - "Test2"


这是调用参数进行评估的顺序。这意味着依次评估new ExampleObject("Test", new ExampleObject("Test2"))首先将评估new ExampleObject("Test2")

08-06 22:10