繁体   English   中英

变量初始化

Variable initialisation

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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);
}
3 个回复

我认为效率不是这里的重点。 关键是正确性

这两个片段执行不同的操作

  • 第一个版本使用不同的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对象。

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

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

1 Kotlin:初始化并获取变量

有什么区别: someObject.getSomeValueWhichChangesFrequently() 经常改变。 将使用第一种方式,只在 init 设置值,然后总是从 abc 返回该值,无论 someObject.getSomeValueWhichChangesFrequently() ...

2021-03-28 09:44:09 1 33   kotlin
2 循环内变量的初始化

上面的以下代码是完全正确的,并且完全按照预期的方式进行操作(要读取字符直到按下句号,然后告诉用户已经输入了多少空格)。 尽管如果我在do-while循环外初始化变量,如以下代码所示: 该程序拒绝停止。 当我进入句号时,程序没有停止。 我确实知道在循环内声明变量将意味着该循环外的其 ...

2015-07-28 16:30:43 6 119   java
3 用自身初始化静态变量

请考虑以下代码示例: 我得到以下编译器警告: 输出: 我期待这个警告,因为foo被用于整体化。 而不是0,'foo'可以是任何东西。 自我赋值未定义。 但为什么“酒吧”的自我分配没有被警告? 这个“bar”的赋值是定义的还是未定义的行为,为什么? 我知道 ...

2014-04-10 14:51:20 1 297   c++
4 为什么变量初始化是多余的?

我已经在UVa Online Judge上解决了一个3 * N + 1问题(100),但这是我不明白的一件事,但它与Java有关,我想,不是算法本身。 所以这是代码: 我不明白:我的IDE(IDEA)告诉我,在这段代码中,变量n和length的初始化是多余的,但是,必须初始化maxLe ...

2016-02-13 18:35:48 2 191   java
5 外部变量的初始化

我有3个文件,如下所示: 上面的程序给出了44作为输出。 我想询问是否保证输出总是44,因为对我来说这个程序工作的确切顺序并不明显,也就是说'a'的初始化在它被使用之前就已经发生了。 main功能? ...

6 继承-子类中的变量初始化

根据我在大学学习的“最佳实践”类课程的知识,我倾向于在可能的情况下优先选择组合而不是继承。 我正在查看应用程序中的一些代码,如下所示: 在上面的示例中:D类在A类中使用公共属性。以前的开发人员在D类中的名称初始化上方写了“这不好”。我相信他之所以写此评论是由于业务规则,而不是他已经在D ...

7 Java变量值初始化

我是Java的初学者,努力了解变量初始化的以下问题,希望能得到专家的帮助。 给定考试代码: 和 我的理解是,这需要引发运行时异常,因为变量“值”永远不会获得分配给它的实际初始值(公共int值;)。 但是,代码可以正常工作并表现为好像变量“值”被分配了0(与public i ...

8 Ruby变量初始化

在下面的代码中有一个执行路径,其中“bar”在测试之前未设置,在Ruby中是否安全? “bar”会默认初始化吗? ...

9 变量初始化节点js

这是我在这个函数中的问题,我试图返回一个对象数组。 当我在 forEach 循环中执行 console.log 时,您可以看到数组已填充,但是当我尝试在 return 语句之前打印它时,它是空的。 这是我的完整 js 文件: 一定是初始化错误或类似的东西,我一直在我的代码中搜索但找不到它 ...

10 这种原始变量的初始化正确吗?

我在这里调用类似这种功能的东西,我有一个名为index的变量,最初将其初始化为0,因为在该初始化行中有一个静态分析器泄漏。 这是解决泄漏的正确方法吗? 自从我开始为0,我的第一次后if条件为真则再次分配为0。这会造成什么问题呢? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM