Java等于烦我

时间:2017-04-17 22:54:34

标签: java equals

我在使用equals时遇到了问题,让我先在这里添加代码:

Operateur o = new Operateur(nom, age, sexe, grade, role);
for(Operateur op : Membre.getOperateurs()){
  if(o.equals((Object)op)){
    already_exists = true;
    break;
  }
}

if(already_exists){
  ret = ">Can't create it : already exists";
  Membre.removeLast();
  o.finalize();
}else{
  ret = ">Created it";
}

在这里,我检查一个新的Operateur是否只是一个旧版本的副本(Membre.getOperateurs获取了Membre所有实际Operateur实例的列表1}})。

我的问题是,当我运行这段代码时,如果我的Operateur是全新的,它看起来已经存在(他不应该,因为他是全新的)。

例如,当我创建第一个Operateur时,它会将其评估为已存在的副本。

作为:

import cmd.*;
import matrice.*;
import persona.*;
import non_grata.non.*;
import non_grata.grata.*;
//all above is importing packages to use all classes required


public class Debug{
  public static void out(String s){
    System.out.println(s);
  }//handy

  public static void main(String[] args){
    Membre.init();//Membre.membre = new ArrayList<Membre>();
    Personnel.init();//Personnel.membre = new ArrayList<Membre>();
    Vaisseau.init();//Vaisseau.vaisseaux = new ArrayList<Vaisseau>();
    MatrixCmd cmd = new MatrixCmd();//Create the command parser

    String parser_input = "afficherMembres";//get some input
    String parser_output = cmd.execCommand(parser_input);//process it
    out(parser_output);//use it
    //empty list, correct since we only initialized it

    parser_input = "newOPsion mikebike 10 o string string";
    parser_output = cmd.execCommand(parser_input);
    out(parser_output);
    //outputs ">Impossible de créer cet Opérateur : Il existe déjà" which it shouldn't
    //since there are no other Operateur and this is only
    //given as output when it founds a similar Operateur

    parser_input = "afficherMembres";
    parser_output = cmd.execCommand(parser_input);
    out(parser_output);
    //outputs an empty list, meaning that there are no Membre created
    //and therefore no Operateur

    parser_input = "newOPsion mikebke 8 f tring sring";//command that will trigger the bit of code above
    parser_output = cmd.execCommand(parser_input);
    out(parser_output);
    //outputs">Impossible de créer cet Opérateur : Il existe déjà" which it shouldn't
  }
}

1 个答案:

答案 0 :(得分:1)

更改return super.equals((Object)o) && this.role==o.role;Object.equals测试参考身份(您知道Object是唯一的实例)。另外,请勿使用==来比较引用类型(例如String)。我想你想要

return this.role.equals(o.role);