2013-09-25 2 views
0

Я пытаюсь прочитать значение атрибута, называемого «версия», из дерева. Значение «2.0». Я устанавливаю оператор if, спрашивающий, имеет ли значение атрибута значение 2.0 для запуска этого кода, вместо этого он запускает оператор else. Я смутился, что сделал логическое значение и установил его равным уравнению. Я распечатываю его, и он читает false, когда это действительно так. Вот мой код:если инструкция помогает при чтении значений атрибутов из дерева XML

out.print("Enter the URL of an RSS 2.0 news feed: "); 
     String url = in.nextLine(); 
     XMLTree xml = new XMLTree1(url); 
     boolean t = xml.hasAttribute("version"); 
     if (t) { 
     out.println(xml.attributeValue("version"));//this prints 2.0 
     boolean a = (xml.attributeValue("version") == "2.0"); //added this to debugg 
     out.println(a); //this gets set to false. why? 
      if (xml.attributeValue("version") == "2.0") { 


       out.println("Hello"); 

      } else { 
       out.println("URL entered is not of version 2.0"); 
      } 
     } else { 
      out.println("No attribute Version"); 
     } 

     /* 
     * TODO: fill in body 
     */ 

     in.close(); 
     out.close(); 
    } 

} 

Im ввод URL: http://news.yahoo.com/rss/, что его дерево имеет корневой тег «RSS», который имеет атрибут «версию», который равен 2,0:

ответ

1

Изменить этот :

boolean a = (xml.attributeValue("version") == "2.0"); 
. . . 
if (xml.attributeValue("version") == "2.0") { 

к:

boolean a = (xml.attributeValue("version").equals("2.0")); 
. . . 
if (xml.attributeValue("version").equals("2.0")) { 

Оператор == в Java проверяет идентичность объекта, а не равенство равенства (вот что вам нужно здесь).

+0

Я согласен с этим ответом, но могу ли я спросить, почему java не любит «==» в выражении if? Java начинающий здесь. :/ – WestonBuckeye

+0

@WestonBuckeye: почему бы Java не понравилось? Оператор '==' и метод '.equals()' просто выполняют разные вещи. –

+0

@WestonBuckeye - Java любит '==' просто отлично. Это просто означает, что «есть ли левая и правая сторона того же объекта?» Метод 'equals()' означает, что этот объект имеет то же значение, что и аргумент (по любой логике, которую этот объект хочет использовать для проверки равенства стоимости)? В случае объектов 'String' логика состоит в том, что две строки имеют одинаковое значение, если они содержат одну и ту же последовательность символов. Ваша проблема возникает из-за того, что два объекта String в Java могут иметь одно и то же значение, не будучи одним и тем же объектом. –

Смежные вопросы