java - 变量初始化

标签 java variables initialization

在循环内部或每次迭代外部分配新值,哪种声明电影对象的方法更有效?

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/

相关文章:

C++结构二维字符串成员初始化

c++ - 使用空标记结构,编译器声称我缺少初始化器,但我不是

java - 使用静态类或此引用将数据从一个Jframe传输到另一个Jframe?

java - 在构建新的 Android 应用程序期间没有 project.properties 文件和 NullPointerException

声明全局变量时的编译器错误

php - 将 php 变量传递给 javascript(无法让它工作)

只有类型 union 才能解决 C 中这种类型的数组数据声明吗?

javascript - 从 Java 服务器使用 Webpack 构建 React View

java - 我如何混淆外部 GWT 开发的 Java 源代码?

python - 惰性模块变量——可以吗?