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

Java foreach循环找不到现有列表元素,java,foreach,Java,Foreach,我在一组Parameter对象中循环,寻找Parameter.name=“code”。如果找不到,则默认为列表中的第一个参数,如下所示: header = WBMessageFactory.getWBMessageDescriptor(Configuration.getWBHeaderIDString()); for (Parameter p : header.getSegment().getParameter()) { if (p.getName() == "

我在一组
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()));
    }
如您所见,当找不到代码时,我会记录
参数
名称偶尔,日志记录会显示以下内容:

Could not find Code parameter in Header template, using Code
有人能解释到底发生了什么吗?

问题在于:

 if (p.getName() == "Code") {
你可能是想说

 if (p.getName().equals("Code")) {
第一个,这几乎肯定不是你想要的。第二个比较字符串的内容。

问题在于:

 if (p.getName() == "Code") {
你可能是想说

 if (p.getName().equals("Code")) {

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

您的问题在下面一行:

if (p.getName() == "Code")

要检查字符串是否相等,必须使用equals。

您的问题在下面一行:

if (p.getName() == "Code")

要检查字符串是否相等,必须使用equals。

要将字符串与
=
进行比较,应使用
equals()
。如果您同时使用这两个字符串,您可以将它们与
=
进行比较,但是JVM会将插入的字符串保留很长一段时间,这可能会被视为内存泄漏,并且微优化可能不会带来很多好处。

如果您将字符串与
=
进行比较,则应该使用
equals()
。如果您同时使用这两个字符串,您可以将它们与
=
进行比较,但是JVM会将插入的字符串保留很长一段时间,这可能会被视为内存泄漏,并且微优化可能不会经常带来好处。

您不应该自己*插入字符串。(*)对于专家来说:几乎从来没有。如果使用方法错误,可能会导致内存泄漏。@马克:谢谢,我会重新表述答案,以避免出现这种情况。你不应该自己实习字符串。(*)对于专家来说:几乎从来没有。如果使用错误,可能会导致内存泄漏。@Mark:谢谢,我将重新表述答案以阻止这种情况发生。