有人能告诉我下面两行代码之间的区别吗?
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
。
答案 0 :(得分:4)
您发布的代码的两个版本之间没有实际差异。 <{1}}在两种情况下都是相同的值。
您发布的代码的第二个版本对人类更具可读性,因此在代码维护和可读性方面,您可能希望使用该版本。
此外,在第一个版本中,您将无法在其他任何地方使用(new DataSource())的值,因为您没有存储对(new DataSource())结果的引用。如果您不需要代码中的任何其他位置的结果,这当然不是问题。
至于问题的第二部分,在java中,您可以认为dat
与ArrayList<Car> dat;
相同。当您声明这样的引用时,它不指向任何内容。但是,当您将其声明为ArrayList<Car> dat = null;
时,您正在创建一个新的ArrayList对象,并使ArrayList<Car> dat = new ArrayList<Car>;
引用它。
答案 1 :(得分:4)
在
ArrayList<Car> dat;
dat = (new DataSource()).getCar();
圆括号是多余的。你可以同样写
dat = new DataSource().getCar();
在你引用的另一个版本中,你正在做一件额外的事情 - 制作一个引用你DataSource
的变量,以备日后使用。
回答你的第二个问题,
ArrayList<Car> dat;
不会创建对象。这里没有ArrayList
,只是一个不引用任何内容的变量。另一方面,
ArrayList<Car> dat = new ArrayList();
创建一个ArrayList
和一个引用它的变量。
答案 2 :(得分:2)
唯一的区别是,在第二个示例中,您在方法调用期间保留对DataSource对象的引用。外括号也是无关的。