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