关于Archiver类的equals方法

2012-11-12

  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应该不会被用到。

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com