以下例程在 WIN XP x32、JAVA 版本 7 更新 9 和 WIN7 x64、JAVA 版本 6 更新 32 上的行为不同。
private int getNrOfMatches(String temp, String regex) {
String prev;
int nrOfIterations = -1;
do {
nrOfIterations++;
prev = temp;
temp = temp.replaceFirst(regex, " ");
} while (temp != prev);
return nrOfIterations;
}
如果 replaceFirst() 没有修改任何内容并且循环在 WIN XP 上结束,则它返回相同的对象。在 Win7 上,它会进入无限循环,!=
因为该例程会返回一个新对象,即使它没有更改任何内容,它也会始终返回 false。使用.equals()
而不是!=
解决这个问题,但我的问题是任何人都可以解释这种行为吗?