2010-11-27 2 views
1

У меня есть этот код:Нерабочий если заявление

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") { 
    ... 
    } 
} 

Это не может быть яснее, но в Toast между двумя, если заявления, это показывает, что child_node_name точно равна «library_visual_scenes» в некоторых точка. Это без второго утверждения if.

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

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

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

ответ

7

Заменить

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

С

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

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

+2

Если это не самая распространенная ошибка программиста java-новичка, она должна быть близкой. – 2010-11-27 16:16:54

2

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

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

и

if(child_node_name.equals("library_visual_scenes")) { 
Смежные вопросы