Java if vs. try/catch 开销
Java中是否有任何开销用于使用 try/catch 块,而不是 if 块(假设包含的代码不请求这样做)?
例如,采用字符串的“安全修剪”方法的以下两个简单实现:
public String tryTrim(String raw) {
try {
return raw.trim();
} catch (Exception e) {
}
return null;
}
public String ifTrim(String raw) {
if (raw == null) {
return null;
}
return raw.trim();
}
如果输入很少,两种方法之间有什么性能差异吗?raw
null
此外,使用该方法简化代码布局是否是一种很好的编程模式,特别是当许多如果块检查罕见的错误条件可以通过将代码包含在一个 try/catch 块中来避免这种情况时?tryTrim()
例如,通常的情况是使用 的方法,该方法在其开头附近使用它们,如果任何此类参数“无效”(例如,null或空字符串),则快速且确定地失败,而不会影响代码的其余部分。N parameters
M <= N
在这种情况下,不必编写 if 块(其中是每个参数的平均检查次数,例如 对于 null 或空字符串),try/catch 块将显著缩短代码,并且可以使用 1-2 行注释来显式注释“非常规”逻辑。k * M
k
k = 2
这样的模式也会加快方法的速度,特别是如果错误条件很少发生,并且它会在不损害程序安全性的情况下这样做(假设错误条件是“正常的”,例如,在字符串处理方法中,null或空值是可以接受的,尽管很少存在)。