0

我有如下代码片段:

List<EmailTemplate> langTemplates = emailTemplateMap.get(categoryId+"_"+languageId);

while (langTemplates.isEmpty() && altLanguageId <= Language.ALL.length)
{
  langTemplates = emailTemplateMap.get(categoryId+"_"+altLanguageId);
  altLanguageId++;
}

这没有按预期工作。我发现(反编译 .class 文件),编译器显然将其更改为:

List langTemplates;
for(langTemplates = (List)emailTemplateMap.get((new StringBuilder(String.valueOf(categoryId))).append("_").append(languageId).toString()); langTemplates.isEmpty() && altLanguageId <= Language.ALL.length; altLanguageId++)
{
  langTemplates = (List)emailTemplateMap.get((new StringBuilder(String.valueOf(categoryId))).append("_").append(altLanguageId).toString());
}

这是不一样的。它只是用它在循环之前定义的内容替换了我正在运行的转义变量(幸运的是我得到了第二个,否则这将成为一个无限循环!)因此检查总是相同的值并且不考虑更新/重新引用循环内的局部变量。

这有道理吗?或者这可以被认为是编译器中的错误?如果不是,我的原始代码错了吗?

感谢您的任何见解。

马克

4

0 回答 0