java - 应该尝试...catch 进入循环内部还是外部?

标签 java performance loops try-catch

我有一个看起来像这样的循环:

for (int i = 0; i < max; i++) {
    String myString = ...;
    float myNum = Float.parseFloat(myString);
    myFloats[i] = myNum;
}

这是一个方法的主要内容,其唯一目的是返回 float 组。如果出现错误,我希望此方法返回 null,因此我将循环放在 try...catch block 中,如下所示:

try {
    for (int i = 0; i < max; i++) {
        String myString = ...;
        float myNum = Float.parseFloat(myString);
        myFloats[i] = myNum;
    }
} catch (NumberFormatException ex) {
    return null;
}

但后来我也想到了将 try...catch block 放入循环中,如下所示:

for (int i = 0; i < max; i++) {
    String myString = ...;
    try {
        float myNum = Float.parseFloat(myString);
    } catch (NumberFormatException ex) {
        return null;
    }
    myFloats[i] = myNum;
}

是否有任何理由(性能或其他方面)偏爱一个而不是另一个?


编辑: 共识似乎是将循环放在 try/catch 中更简洁,可能放在它自己的方法中。但是,仍然存在关于哪个更快的争论。有人可以对此进行测试并给出统一的答案吗?

最佳答案

性能:

try/catch 结构的放置位置绝对没有性能差异。在内部,它们被实现为结构中的代码范围表,该结构在调用方法时创建。当方法执行时,try/catch 结构完全不存在,除非发生 throw,然后将错误的位置与表进行比较。

这是一个引用:http://www.javaworld.com/javaworld/jw-01-1997/jw-01-hood.html

table 被描述到一半。

关于java - 应该尝试...catch 进入循环内部还是外部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/141560/

相关文章:

performance - 需要帮助提高 PowerShell 分隔文本解析脚本的性能

java - 我应该什么时候使用 ConcurrentSkipListMap?

c++ - 如何解决 for 循环中的差一问题

java - Jasper在Java中使用jsonql数据源填充报告

java - 聚合框架 - 组操作抛出 NumberFormatException

java - Collat​​or 比较字符串很奇怪

performance - Haskell 性能 : Inversion count algorithm

java - 检查数组中的唯一数字并循环返回

c++ - 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个

java - 如何在java中为复选框文本编写上标单词?