非工作if语句

Esp*_*pen 1 java string comparison reference

我有这个代码:

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" ) {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

它不能更清楚,但在两个if语句之间的Toast中,它表明child_node_name在某个时刻完全等于"library_visual_scenes".这没有第二个if语句是真的.

当child_node_name等于"#text"时,第一个if语句会被执行.意思是我从未在Toast中看到文本"#text".

child_node_name是一个String对象.这是将String与字符串进行比较的正确方法吗?

我不知道这里发生了什么.这可能是一些特定于Android的东西,因为如果我在计算机上以普通Java的形式运行它,几乎相同的代码可以工作吗?

Kon*_*rov 7

更换

child_node_name == "library_visual_scenes"
child_node_name == "#text"
Run Code Online (Sandbox Code Playgroud)

"library_visual_scenes".equals(child_node_name);
"#text".equals(child_node_name);
Run Code Online (Sandbox Code Playgroud)

这就是你必须比较java中的字符串."=="比较引用,而不是内容.

  • @Espen很好,"text".equals(some_variable)可以在some_variable为null时保存(防止可能的NullPointerEception).所以我认为这是首选的方法,以防你不完全确定调用some_variabe.equals()是安全的 (3认同)
  • 如果这不是新手java程序员最常见的错误,那就必须要接近. (2认同)