Java编译器在while循环中中断了转义逻辑

时间:2012-04-20 07:35:37

标签: java loops while-loop

我有一个如下代码片段:

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());
}

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

这有什么意义吗?或者这可以被认为是编译器中的错误? 如果没有,我的原始代码是错误的吗?

感谢您的任何见解。

马克

0 个答案:

没有答案