1

谁能告诉我下面两行代码的区别?

ArrayList<Car> dat;
dat = (new DataSource()).getCar();

DataSource ds = new DataSource();
dat = ds.getCar(); 

new DataSource()加括号是什么意思?

最后,这两种情况下dat的结果是什么?

 ArrayList<Car> dat;

 ArrayList<Car> dat = new ArrayList();

注意: 辅助getCar函数返回一个 ArrayList 到dat.

4

3 回答 3

4

您发布的代码的两个版本之间没有实际区别。dat在这两种情况下将是相同的值。

您发布的代码的第二个版本对人类来说更具可读性,因此在代码维护和可读性方面,您可能希望使用该版本。

此外,在第一个版本中,您将无法在其他任何地方使用 (new DataSource()) 的值,因为您没有存储对 (new DataSource()) 结果的引用。如果您在代码中的其他任何地方都不需要结果,这当然不是问题。

至于您问题的第二部分,在 java 中,您可以认为ArrayList<Car> dat;ArrayList<Car> dat = null;. 当您声明这样的引用时,它并不指向任何东西。但是,当您将其声明ArrayList<Car> dat = new ArrayList<Car>;为时,您正在创建一个新的 ArrayList 对象并dat对其进行引用。

于 2013-09-17T03:19:06.870 回答
4

ArrayList<Car> dat;
dat = (new DataSource()).getCar();

括号是多余的。你同样可以写

dat = new DataSource().getCar();

在您引用的另一个版本中,您正在做一件额外的事情-制作一个引用您的变量,以DataSource供以后使用。

在回答你的第二个问题时,

ArrayList<Car> dat;

不创建对象。这里没有ArrayList,只是一个不引用任何东西的变量。另一方面,

ArrayList<Car> dat = new ArrayList();

创建一个ArrayList和一个引用它的变量。

于 2013-09-17T03:45:40.803 回答
2

唯一的区别是,在第二个示例中,您在方法调用期间保留对 DataSource 对象的引用。外括号也是无关的。

于 2013-09-17T03:21:54.070 回答