Я действительно пробовал искать ответ на этом форуме для такого вопроса, но пока ничего не работает.java object равенство не работает
Я хочу напечатать проверить декларацию метода, такие как:
public int stackOverFlow() {int a; a = a + 1; return 0;}
тип выражения возврата должен совпадать с типом возвращаемого методом (в данном примере это верно).
Я использую Java Tree Builder, который генерирует деревья синтаксиса для всех моих нетерминалов в моей грамматике (в виде узлов) и посетителя с глубиной по умолчанию.
У меня есть класс MethodDeclaration, который реализует интерфейс узла. Интерфейс узла имеет метод принимать формы:
public Node accept(TypeVisitor v){ return v.visit(v));
Это принимает метод делает возможным для TypeVisitor посетить MethodDeclaration.
Теперь посетить объявление метода, я один простой тип проверки
public Node visit(MethodDeclaration n){
// this visits the f10 Node, which is the return expression,
// and returns a specific Node object
Node rtype = n.f10.accept(this);
// this also does a similar thing by visitng the f1 Node,
// the method's return type, and returns a specific Node Object
Node acType = n.f1.accept(this);
// Now if I compare the two specific Node objects, it always fails.
if(rtype == acType){
//enter here
}
}
Почему не ввести if-тело? Я также попробовал rtype.equals(acType)
, и он возвращает false.
Я пробовал rtype.toString.equals(acType.toString())
, который также возвращает false.
Я попытался шагать в код, используя затмение отладчик и вот результат:
rtype IntegerType (id=67)
acType IntegerType (id=69)
Как видно из вывода отладчика как RTYPE и acType являются IntegerType объекты.
Любая идея, почему сравнение не удается?
Если я использую если (RTYPE InstanceOf IntegerType) это возвращает истину и
Если я использую если (acType InstanceOf IntegerType) это также возвращает истину.
Но сравнение объектов всегда терпит неудачу?
Я использую JavaCC (для генерации синтаксических анализаторов), JTB (AST и посетители творец), затмение и Java 1.7
Непонятно, почему вы ожидаете, что узлы будут * равными *. Мы не знаем достаточно о методе 'accept', чтобы знать, что представляют собой два узла. –
Кроме того, пожалуйста, обратите внимание на форматирование вашего вопроса в будущем. Пожалуйста, прочитайте http://tinyurl.com/so-list –
Сколько дубликатов «мои объекты не равны, когда я использую' == '» ...? – cHao