当你测试 indexOf 的返回值时,你通常会写什么?
if str.indexOf("a") < 0
对比
if str.indexOf("a") == -1
一种方法会优于另一种方法吗?
我实际上是在为任何语言的任何函数提出这个问题,该函数在错误时返回 -1。
我通常更喜欢 < 0 方法,因为如果函数扩展为在其他情况下返回 -2,代码仍然可以工作。
但是,我注意到 == -1 方法更常用。有什么原因吗?
当你测试 indexOf 的返回值时,你通常会写什么?
if str.indexOf("a") < 0
对比
if str.indexOf("a") == -1
一种方法会优于另一种方法吗?
我实际上是在为任何语言的任何函数提出这个问题,该函数在错误时返回 -1。
我通常更喜欢 < 0 方法,因为如果函数扩展为在其他情况下返回 -2,代码仍然可以工作。
但是,我注意到 == -1 方法更常用。有什么原因吗?
我试图实现对“错误条件”的测试应该尽可能广泛的一般原则。因此我会使用< 0
而不是== -1
.
这是我在 CS 学位期间在正式方法的课程中教授的一个原则。
简单if
来说,这并不重要,但在循环中,重要的是检测任何“超出范围”条件以确保循环终止,而不是假设循环终止值将被准确命中。
举个例子:
i = 0;
while (i < 10) {
++i;
// something else increments i
}
对比
i = 0;
while (i != 10) {
++i;
// something else increments i
}
后一种情况可能会失败 - 前一种情况不会。
我也更喜欢 <0 方法。根据 Java 文档,== -1 方法被广泛使用的原因是,如果索引丢失,函数确实会返回 -1,并且永远不会发生“扩展函数”的情况。
在几乎所有情况下,建议尽可能地坚持 Java 文档。请参阅 Java 文档: http ://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29
...根据它:-1 将被返回。
所以我总是检查-1。如果您要检查特定值,则检查该特定值会更安全,以防止将来 java api 中的代码更改。
例如,如果你得到一个 -2,这意味着你的 JVM 中出现了严重错误。这并不意味着“未找到”。代码继续执行并导致异常/错误会更好。
根据 javadoc indexOf 总是应该返回 -1 如果字符没有按顺序出现 http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29
正如 Sandeep Nair 指出的那样,javaDoc 对此进行了解释,但我想评论一下。
两者都可以正常工作,我不会说一个比另一个“更好”。许多人写作的原因== -1
是,如果“找不到东西”,搜索方法会返回 -1。我们不能使用 0,因为它们被用作数组等中的索引。
所以,这是一个见仁见智的问题。只要公约继续存在,就没有关系。
我会使用-1
只是因为我想检查我的期望。
我不期待-2
。如果我得到了-2
,那可能意味着我有一些问题。检查你的期望比检查你可能期望的要好。