++和+1之间的区别

时间:2016-02-23 14:05:58

标签: java while-loop infinite-loop increment

当我在while循环的最后一行中有startIndex++时,它会导致无限循环,但使用startIndex + 1,程序运行正常。我想知道为什么会这样?

public static int numOccurrences(String src, String q) {

        int startIndex = src.indexOf(q);
        int counter = 0;

        while (startIndex != -1) {
            counter++;
            startIndex = src.indexOf(q, startIndex + 1);
        }

        return counter;
    }

2 个答案:

答案 0 :(得分:3)

考虑会发生什么 - 如果indexOf失败,则返回-1。如果你之后有一个盲startIndex++,那么你的startIndex会变成0,循环会回绕,0 != -1为TRUE,继续循环。你会得到另一个-1,将其增加到0,并且你周围和周围 - 搜索,失败,递增,循环/重复。

答案 1 :(得分:3)

表达式startIndex++增加变量startIndex的值,但它返回旧值startIndex。在评估包含startIndex++的表达式后,您将结果分配给startIndex。这意味着在您的情况下,丢弃增量并且startIndex++startIndex将具有完全相同的结果:每次都会发现相同的事件,并且您有一个无限循环。

另一方面,表达式startIndex + 1不会更改startIndex的值,但会计算为startIndex值之后的整数。现在indexOf在找到的事件发生后开始搜索,因此您没有无限循环。