Java 测试indexOf返回值的最佳实践
在测试indexOf的返回值时,您通常写什么Java 测试indexOf返回值的最佳实践,java,javascript,Java,Javascript,在测试indexOf的返回值时,您通常写什么 if str.indexOf("a") < 0 一种方法比另一种更可取吗 我实际上是在为任何语言中错误返回-1的函数提出这个问题 我通常更喜欢
if str.indexOf("a") < 0
一种方法比另一种更可取吗
我实际上是在为任何语言中错误返回-1的函数提出这个问题
我通常更喜欢<0方法,因为如果函数在其他情况下扩展为返回-2,代码仍然可以工作
但是,我注意到==-1方法更常用。有什么原因吗?我试图实现“错误条件”测试应尽可能广泛的一般原则。因此,我将使用
<0
而不是=-1
这是我在CS学位期间,在正式方法的课堂上教授的一条原则
在一个简单的if
上,这并不重要,但在循环上,重要的是要检测任何“超出范围”的情况,以确保循环终止,而不是假设循环终止值将被精确命中
例如:
i = 0;
while (i < 10) {
++i;
// something else increments i
}
后一种情况可能会失败-前一种情况不会。根据javadoc,我也更希望,如果字符不按顺序出现,indexOf总是应该返回-1
在几乎所有情况下,建议尽可能坚持使用Java文档。 参见Java文档: 。。。根据它:-1将被返回 所以我总是检查-1。如果您有一个特定的值要检查,那么更安全的做法是检查该特定的值,以防止将来java api中的代码更改
例如,如果您得到了a-2,这意味着JVM中有些东西严重错误。这并不意味着“找不到”。代码继续并导致异常/错误会更好。正如Sandeep Nair指出的那样,javaDoc对此进行了解释,但我想对此稍作评论 两者都很好,我不会说其中一个比另一个更好。许多人编写
==-1
的原因是,有一个普遍的惯例,即如果“找不到东西”,搜索方法将返回-1。我们不能使用0,因为它们在数组等中用作索引
所以,这是一个意见的问题。只要约定保持不变,就没关系。我会使用
-1
,因为我想检查我的期望值
我不希望看到
-2
。如果我得到了-2
,那可能意味着我有一些问题。检查您期望的内容比检查您可能期望的内容要好。对于Java,indexOf明确指定如果在字符串中找不到匹配项,它将返回-1。因此,更改它将是API中的一个中断,因此我们可以相信它将返回-1。但是如果(!~str.indexOf(“a”)稍微不那么详细,我也更喜欢使用。但是在这种情况下,Java API特别告诉我们将返回-1。它是,但它隐含着成功时将返回0或更高的整数值,因此相反(即<0
)是完全有效的计数器测试。如果返回-2,则不表示“未找到”。它没有定义。。难道您不希望代码继续运行并导致空指针或某些错误吗?通过这种方式,至少可以揭示JVM问题。
i = 0;
while (i < 10) {
++i;
// something else increments i
}
i = 0;
while (i != 10) {
++i;
// something else increments i
}