[英]Is anonymous object instantiation possible in Java?
谁能告诉我下面两行代码之间的区别?
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
。
您发布的代码的两个版本之间没有实际区别。 两种情况下dat
的值都相同。
您发布的代码的第二个版本更容易被人阅读,因此,在代码维护和可读性方面,您可能希望使用该版本。
同样,在第一个版本中,由于您没有存储对(new DataSource())结果的引用,因此您将无法在其他任何地方使用(new DataSource())的值。 如果您不需要代码中的其他任何地方的结果,那么这当然不是问题。
至于问题的第二部分,在Java中,您可以想到ArrayList<Car> dat;
与ArrayList<Car> dat = null;
。 当您声明这样的引用时,它不会指向任何内容。 当您将其声明为ArrayList<Car> dat = new ArrayList<Car>;
但是,您正在创建一个新的ArrayList对象并使dat
引用它。
在
ArrayList<Car> dat;
dat = (new DataSource()).getCar();
括号是多余的。 你也可以写
dat = new DataSource().getCar();
在您引用的另一个版本中,您要做的另一件事-创建一个引用您DataSource
的变量,以备将来使用。
在回答第二个问题时,
ArrayList<Car> dat;
不创建对象。 这里没有ArrayList
,只是一个不引用任何内容的变量。 另一方面,
ArrayList<Car> dat = new ArrayList();
创建一个ArrayList
和一个引用它的变量。
唯一的区别是,在第二个示例中,您在方法调用期间保留了对DataSource对象的引用。 同样,外部括号是多余的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.