[英]Variable initialisation
在循环内还是在每次迭代外部分配新值时,哪种更有效的方法来声明影片对象?
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);
}
极有可能没有可检测到的差异。
最好在for循环中初始化Movie对象,除非您希望列表仅包含对一个Movie对象的多个引用。 这与效率无关,而与无错误编码有关。 可以在循环之前或循环内部声明Movie对象。
为了提高效率,第二个代码因为不必每次都调用和执行构造函数。
但是,为了正确起见,您可能需要第一个对象,因为第二个对象会多次为您提供列表中的同一对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.