我正在遍历一组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)
谁能解释一下到底发生了什么?
问题出在这里:
if (p.getName() == "Code") {
Run Code Online (Sandbox Code Playgroud)
你可能想说
if (p.getName().equals("Code")) {
Run Code Online (Sandbox Code Playgroud)
第一个比较字符串引用,这几乎肯定不是你想要的.第二个比较字符串的内容.