【问题标题】:Which is best between try catch and if statement [duplicate]try catch 和 if 语句之间哪个最好[重复]
【发布时间】:2022-11-24 17:11:47
【问题描述】:

首先,我想描述一下,有五千多条记录。请让我从以下方面了解最佳性能的最佳方法:

String hmVALUE = "";

try
{
hmVALUE = hashmapRECORDS.get(key).toString();
}
catch(Exception ex)
{
hmVALUE = "";
}

// Second method:

String hmVALUE = "";

if(Module.hmQUEUED_REQUESTS.containsKey(key))
{
hmVALUE = hashmapRECORDS.get(key).toString();
}
else
{
hmVALUE = "";
}

我正在使用 try-catch 并想知道哪种方法最好。

【问题讨论】:

  • 原则:如果可以绕过异常,则永远不要将异常用于正常控制流(可能存在异常情况,但很少见)。话虽这么说,使用第三种方法:Object x = hashmapRECORDS.get(key); hmVALUE = x != null ? x.toString() : "";
  • 您好,欢迎来到 stack overflow,您能否格式化您的代码以使其更具可读性?
  • if 语句不能替代 try-catch。 if 语句是关于条件选择的,try catch 是异常/错误处理
  • 顺便说一句,您的第二种方法将不起作用,因为您在与您尝试从中获取值的地图不同的地图中检查密钥。
  • 顺便说一句,这两个代码并不相同 - hmQUEUED_REQUESTShashmapRECORDS 有什么关系?

标签: java


【解决方案1】:

两者都不理想。最好调用get() 并检查结果是否为空:

String hmVALUE = "";
Object value = hashmapRECORDS.get(key);
if (value != null) {
    hmVALUE = value.toString();
}

【讨论】:

  • (假设 null 不是 Map 中的有效值)
  • 如果是这样,OP 的第二种方法就会被破坏。
  • 无论如何,它可能是:“hmQUEUED_REQUESTShashmapRECORDS 有什么关系?”
  • 我假设 OP 调整了他的代码并忘记更新该行。
  • 我也是,但这正是重点,他们还忘记了什么......(例如 null 支票?)
【解决方案2】:

一般来说,异常是 Java 生成的更重的操作(它们需要收集堆栈跟踪等...)所以在这种特定情况下,我会说 if 语句比 try-catch 好得多。

然而,对于一般的问题,这些是完全不同的机制——第一个应该处理意外错误,而另一个是流量控制。

此外,您可以使用简短的condition ? if true : if false 语法并使整个代码如下所示:

String hmVALUE = Module.hmQUEUED_REQUESTS.containsKey(key) ? hashmapRECORDS.get(key).toString() : ""

更具体地说,您可以使用 getOrDefault() 方法:

String hmVALUE = hashmapRECORDS.getOrDefault(key, "");

【讨论】:

  • 我不会使用 containsKey(key) + get(key) 组合,因为这是在进行 2 次查找。如果真的不需要知道键是否在地图中,即您只关心值,只需执行 get(key) 并检查您是否有任何东西:是 - 键在地图中,否 - 键可能在地图上或不在地图上,无论如何都没有价值。
  • 我也不会使用它,我只是复制了他们写的代码,这就是我在这里建议使用 getOrDefault() 的原因,因为它会提供相同的行为并且更容易理解
  • 1)堆栈跟踪仅在需要时创建; 2)它实际上取决于数据,如果我们几乎总是命中,则几乎不会抛出异常(并且更便宜比 2 查找)
  • 是的,没错,这里没有建造银器,这要视情况而定……
  • 非常感谢所有人,并清除
猜你喜欢
  • 2014-06-18
  • 1970-01-01
  • 2018-01-27
  • 2010-11-25
  • 2013-09-06
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多