繁体   English   中英

后增量变为jar中的预增量

[英]post increment becomes pre increment in jar

第一个片段来自我编写的Java类,第二个片段来自包含该类的反编译的jar文件。 我注意到的是,后期增量现在是前置增量,这可能会影响我的功能。

if (uiType.equals("structure")) {           

        NodeList images = doc.getElementsByTagName("img");
        for (int i = 0; i < images.getLength(); i++) {
            Node img = images.item(i);
            Element imgEle = (Element) img;
            String srcUrl = imgEle.getAttribute("src");
            if (srcUrl.startsWith("image")) {
                srcUrl = appUrl+"/common/"+srcUrl;
            }else {
                continue;
            } 
            imgEle.setAttribute("src", srcUrl);
        }

if (str5.equals("structure"))
    {
      Object localObject3;
      Object localObject5;
      Object localObject7;
      Object localObject9;
      localObject1 = localDocument.getElementsByTagName("img");
      for (int i = 0; i < ((NodeList)localObject1).getLength(); ++i) {
        Node localNode = ((NodeList)localObject1).item(i);
        localObject3 = (Element)localNode;
        localObject5 = ((Element)localObject3).getAttribute("src");
        if (((String)localObject5).startsWith("image")) {
          localObject5 = str6 + "/common/" + ((String)localObject5);

          ((Element)localObject3).setAttribute("src", (String)localObject5);
        }
      }
}

不,它不会以任何方式影响您的代码。 即使for循环中的标准用法是int i = 0;i < 10; i++ int i = 0;i < 10; i++ ,如果最后一项是预增量,则行为是相同的。

它不会影响您的程序,因为增量是“本身”。 这两个表达式之间的唯一区别是i的值,正如同一条语句中其他表达式所看到的; 由于没有其他表达式(整个语句只是增量, i++ ),因此在您可以看到的地方,前后的外观相同。

您看到它的原因是++i效率更高,因为它不需要记住i的旧值。 这是一个非常简单的编译器优化,是javac实际执行的少数几个优化之一(大多数优化是在运行时由HotSpot完成的)。

通常,您可以相信javac不会破坏您的程序。 它是一个经过充分测试的编译器,如果它破坏了像for循环这样的基本功能,那将是非常令人惊讶的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM