Неработающий оператор if - PullRequest
       28

Неработающий оператор if

1 голос
/ 27 ноября 2010

У меня есть этот код:

Node main_node = document.getDocumentElement();
NodeList main_node_list = main_node.getChildNodes();
for( int main_iterator = 0; main_iterator < main_node_list.getLength(); main_iterator++ ) {
    Node child_node = main_node_list.item( main_iterator );
    String child_node_name = child_node.getNodeName();
    if( child_node_name == "#text" ) continue;
    Toast.makeText( context, "\"" + child_node_name + "\"", Toast.LENGTH_SHORT ).show();
    if( child_node_name == "library_visual_scenes" ) {
    ...
    }
}

Это не может быть более понятным, но в тосте между двумя утверждениями if он показывает, что child_node_name в какой-то момент точно равен "library_visual_scenes". Это без второго утверждения if, являющегося истинным.

Первый оператор if, когда child_node_name равен «#text», действительно выполняется. Это означает, что я никогда не вижу текст "#text" в тосте.

child_node_name является объектом String. Это правильный способ сравнения строки с символьной строкой?

Я не могу выяснить, что здесь происходит. Может ли это быть чем-то специфичным для Android, поскольку почти тот же код работает, если я запускаю его как обычный Java на моем компьютере?

Ответы [ 2 ]

7 голосов
/ 27 ноября 2010

Заменить

child_node_name == "library_visual_scenes"
child_node_name == "#text"

С

"library_visual_scenes".equals(child_node_name);
"#text".equals(child_node_name);

Вот как вы должны сравнивать строки в Java. "==" сравнивает ссылки, а не содержимое.

2 голосов
/ 27 ноября 2010

Измените следующие строки, чтобы использовать метод equals:

if( child_node_name.equals("#text") ) continue;

и

if( child_node_name.equals("library_visual_scenes") ) {
...