Archiver
这个类中出现两处错误。
private String excute(StringBuffer expiression){
if(expiression==null||expiression.equals("0")){
return "0";
}
int indexF = expiression.lastIndexOf("(");
if(indexF<0){
return count(expiression.toString());
}else{
int indexA = expiression.indexOf(")", indexF);
return excute(expiression.replace(indexF, indexA+1, count(expiression.substring(indexF+1, indexA))));
}
}
equals比较的是两个同类型的对象
虽然stringBuffer默认继承Object 的equals方法,但是expiression.equals("0")就算是expiression = new StringBuffer("0");比较的结果依旧是false
所以应该是改为:
private String excute(StringBuffer expiression){
if(expiression==null||(expiression.toString()).equals("0")){
return "0";
}
int indexF = expiression.lastIndexOf("(");
if(indexF<0){
return count(expiression.toString());
}else{
int indexA = expiression.indexOf(")", indexF);
return excute(expiression.replace(indexF, indexA+1, count(expiression.substring(indexF+1, indexA))));
}
}
这个类还有一处同样的错误
他们的equals是myeclipse生成来的,这是造成这个问题的直接原因。
ps:不过如果他们没有使用过hash类的集合类,这个equals的bug应该不会被用到。