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:谢谢,我将重新表述答案以阻止这种情况发生。