Java foreach循环找不到现有的列表元素

Mic*_*ler 1 java foreach

我正在遍历一组Parameter对象,寻找Parameter.name = "Code".如果我找不到它,我默认为列表中的第一个参数,如下所示:

    header = WBMessageFactory.getWBMessageDescriptor(Configuration.getWBHeaderIDString());

    for (Parameter p : header.getSegment().getParameter()) {
        if (p.getName() == "Code") {
            String wbCode = raw.substring(p.getStartPosition().intValue(), p.getLength().intValue());
            logger.info("Found WB code... " + wbCode);
            body = WBMessageFactory.getWBMessageDescriptor(wbCode);
            break;  
        }
    }

    if (body == null) {
        Parameter p = header.getSegment().getParameter().get(0);
        logger.error("Could not find Code parameter in Header template, using " + p.getName());
        body = WBMessageFactory.getWBMessageDescriptor(raw.substring(p.getStartPosition().intValue(), p.getLength().intValue()));
    }
Run Code Online (Sandbox Code Playgroud)

如您所见,我在Parameter找不到Code时记录该名称.有时,日志记录显示以下内容:

Could not find Code parameter in Header template, using Code
Run Code Online (Sandbox Code Playgroud)

谁能解释一下到底发生了什么?

NPE*_*NPE 7

问题出在这里:

 if (p.getName() == "Code") {
Run Code Online (Sandbox Code Playgroud)

你可能想说

 if (p.getName().equals("Code")) {
Run Code Online (Sandbox Code Playgroud)

第一个比较字符串引用,这几乎肯定不是你想要的.第二个比较字符串的内容.


Ben*_*pel 5

您的问题在以下行:

if (p.getName() == "Code")
Run Code Online (Sandbox Code Playgroud)

要检查字符串相等性,必须使用equals.