在循环内部或每次迭代外部分配新值,哪种声明电影对象的方法更有效?
ArrayList<Movie> localMovies = new ArrayList<Movie>();
for (File file : listOfFiles) {
Movie movie = new Movie();
movie.setTitlePattern(filePattern);
localMovies.add(movie);
}
或者
ArrayList<Movie> localMovies = new ArrayList<Movie>();
Movie movie = new Movie();
for (File file : listOfFiles) {
movie.setTitlePattern(filePattern);
localMovies.add(movie);
}
最佳答案
我不认为效率是这里的关键点。关键点是正确性。
这两个片段执行不同的操作。。
第一个版本使用不同的
Movie
对象填充列表。第二个版本使用对单个
Move
对象的多个引用来填充列表。然后,您可以继续更改该对象的标题模式。因此,当循环结束时,您将拥有对同一对象的 N 个引用,并且该对象的标题模式将是最后一组。
虽然在没有更多上下文的情况下无法确定,但第二个版本看起来不正确......它没有做(我认为)你想要做的事情。
<小时/>话虽如此,代码的“不正确”版本可能会更快一些。差异是否显着(值得担心)取决于上下文。无论如何,这个问题毫无意义。
如果您要比较这两个“正确”版本的性能:
ArrayList<Movie> localMovies = new ArrayList<Movie>();
for (File file : listOfFiles) {
Movie movie = new Movie();
movie.setTitlePattern(filePattern);
localMovies.add(movie);
}
和
ArrayList<Movie> localMovies = new ArrayList<Movie>();
Movie movie;
for (File file : listOfFiles) {
movie = new Movie();
movie.setTitlePattern(filePattern);
localMovies.add(movie);
}
很可能没有可察觉的差异。
关于java - 变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5061383/