Java 变量初始化

Java 变量初始化,java,variables,initialization,Java,Variables,Initialization,在循环内部还是在每次迭代外部指定新值时,哪种方法更有效地声明电影对象 ArrayList<Movie> localMovies = new ArrayList<Movie>(); for (File file : listOfFiles) { Movie movie = new Movie(); movie.setTitlePattern(filePattern); localMovies.add(movie); } arraylistl

在循环内部还是在每次迭代外部指定新值时,哪种方法更有效地声明电影对象

ArrayList<Movie> localMovies = new ArrayList<Movie>();    
for (File file : listOfFiles) {
    Movie movie = new Movie();
    movie.setTitlePattern(filePattern);
    localMovies.add(movie);
}
arraylistlocalmovies=newarraylist();
对于(文件:listOfFiles){
电影=新电影();
电影。设置标题模式(文件模式);
添加(电影);
}

arraylistlocalmovies=newarraylist();
电影=新电影();
对于(文件:listOfFiles){
电影。设置标题模式(文件模式);
添加(电影);
}

最好在for循环中初始化Movie对象,除非希望列表中只包含一个Movie对象的多个引用。这与效率无关,而与无bug编码有关。可以在循环之前或循环内部声明电影对象。

除非您希望列表中只包含一个电影对象的多个引用,否则最好在for循环内部初始化电影对象。这与效率无关,而与无bug编码有关。可以在循环之前或循环内部声明电影对象。

我认为效率不是关键。关键是正确性

这两个片段做了不同的事情

  • 第一个版本使用不同的
    Movie
    对象填充列表

  • 第二个版本使用对单个
    Move
    对象的多个引用填充列表。然后继续更改该对象的标题模式。因此,当循环完成时,您将有N个对同一对象的引用,并且该对象的标题模式将是最后一组

虽然没有更多的上下文就无法确定,但第二个版本看起来不正确。。。它不做你(我认为)想做的事


话虽如此,代码的“错误”版本可能要快一点。差异是否显著(值得担忧)取决于上下文。这个问题无论如何都是没有意义的

如果要比较这两个“正确”版本的性能:

ArrayList<Movie> localMovies = new ArrayList<Movie>();    
for (File file : listOfFiles) {
    Movie movie = new Movie();
    movie.setTitlePattern(filePattern);
    localMovies.add(movie);
}
arraylistlocalmovies=newarraylist();
对于(文件:listOfFiles){
电影=新电影();
电影。设置标题模式(文件模式);
添加(电影);
}

arraylistlocalmovies=newarraylist();
电影;
对于(文件:listOfFiles){
电影=新电影();
电影。设置标题模式(文件模式);
添加(电影);
}

很可能没有明显的区别。

我不认为效率是关键。关键是正确性

这两个片段做了不同的事情

  • 第一个版本使用不同的
    Movie
    对象填充列表

  • 第二个版本使用对单个
    Move
    对象的多个引用填充列表。然后继续更改该对象的标题模式。因此,当循环完成时,您将有N个对同一对象的引用,并且该对象的标题模式将是最后一组

虽然没有更多的上下文就无法确定,但第二个版本看起来不正确。。。它不做你(我认为)想做的事


话虽如此,代码的“错误”版本可能要快一点。差异是否显著(值得担忧)取决于上下文。这个问题无论如何都是没有意义的

如果要比较这两个“正确”版本的性能:

ArrayList<Movie> localMovies = new ArrayList<Movie>();    
for (File file : listOfFiles) {
    Movie movie = new Movie();
    movie.setTitlePattern(filePattern);
    localMovies.add(movie);
}
arraylistlocalmovies=newarraylist();
对于(文件:listOfFiles){
电影=新电影();
电影。设置标题模式(文件模式);
添加(电影);
}

arraylistlocalmovies=newarraylist();
电影;
对于(文件:listOfFiles){
电影=新电影();
电影。设置标题模式(文件模式);
添加(电影);
}

这很可能不会有明显的差异。

为了提高效率,第二个是,因为它不必每次都调用和执行构造函数


但是,为了正确起见,您可能需要第一个,因为第二个在列表中多次提供相同的对象。

为了提高效率,第二个,因为它不必每次都调用和执行构造函数


但是,为了正确起见,您可能需要第一个,因为第二个在列表中多次提供相同的对象。

当您完成循环时,它们都将具有相同的标题模式。当您完成循环时,它们都将具有相同的标题模式。
ArrayList<Movie> localMovies = new ArrayList<Movie>();  
Movie movie;  
for (File file : listOfFiles) {
    movie = new Movie();
    movie.setTitlePattern(filePattern);
    localMovies.add(movie);
}