以下代码将抛出异常“String index out of range:-1”。 从Java性能的角度来看,检查index>是否更好? -1或者只是让代码抛出异常?让框架处理Logging it?
String abc = "somedata";
if (abc != null) {
int index = abc.lastIndexOf(',');
abc = abc.substring(0, index);
}
=编辑=我想我会总结一下讨论/观点。
我的一些开发者朋友之间就此争论不休。我尊重这两种观点,如下所述。
合法用户将提交正确的数据并获得正确的结果。 黑客/脚本编写者/非合法使用发布无效数据的应用程序可能会在UI中看到损坏的页面,但我关心的最少。 我让系统抛出异常,让框架捕获并记录它。 让它被记录的好处告诉我有脚本滥用我的系统。
知道有脚本/黑客试图滥用我的系统,那么什么? IMO,关于网络上任何重要的知名系统,大多数都会定期收到来自黑客系统的大量脚本请求。 不需要任何证据或证明。识别和阻止它们是WAF系统的工作,而不是我记录数千个代码 例外情况每天都要告诉黑客。
我同意mvd的回答,而不是投掷/捕获/记录。 当我们发布无效数据时,我们必须决定我们想要做什么,要么是导致不满意的业务流程,要么是我不关心的完全有缺陷的请求。 如果我关心然后做备用业务流场景,如果我不在乎,则忽略并记录警告,不需要抛出/ catch / throw / catch / log等。
同样,这是有争议的,决定可能会受个案情况的影响。
感谢大家的回复。
答案 0 :(得分:0)
我不能谈论性能成本,但我会说最好不要使用异常来驱动应用程序逻辑。
例外就是例外情况。如果您可以在代码中编程和解释您的推理,那么这比使用异常更好。
public String substringOnComma(String value) {
String abc = "";
if (value != null) {
if (containsComma(value) {
int index = value.lastIndexOf(',');
abc = value.substring(0, index);
}
}
return abc;
}
public boolean containsComma(String value) {
boolean comma = false;
if (value.lastIndexOf(',') != -1) {
comma = true;
}
return comma;
}
答案 1 :(得分:0)
出于性能和可维护性的原因,最好检查值而不是捕获异常。检查值是否为-1是现代CPU的单个指令,根据方法的不同,抛出和捕获异常可能有数百个。