2015-06-03 4 views
2

Первый фрагмент из класса java, который я написал, а второй - из декомпилированного файла jar, содержащего класс. Что я заметил, так это то, что приращение сообщения теперь предварительно увеличивается, и это, вероятно, влияет на мою функцию.post increment становится pre increment в 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); 
     } 
     } 
} 
+0

* «Я заметил, что приращение постов теперь предварительно увеличивается, и это, вероятно, влияет на мою функцию». * И как? – Tom

+0

Я упомянул в комментарии ниже. Я пытаюсь добавить свой appurl к относительному URL-адресу изображения, и он работает на моей локальной машине, а не в нашем доменном поле, где используется банка. - то есть изображения не отображаются. Я подозреваю, что это не причина. просто может быть. – stackMan10

+0

И каков был результат вашего исследования о различиях между предварительным приращением и пост-приращением в цикле for? И являются ли эти результаты причиной того, почему вы думали, что это может быть проблемой? – Tom

ответ

3

Это не влияет на вашу программу, потому что приращение «само по себе». Единственное различие между этими двумя выражениями - это значение i, как видно из других выражений в одном выражении; так как других выражений нет (весь оператор - это просто инкремент, i++), после и до того же, насколько вы можете их видеть.

Причина, по которой вы видите это, заключается в том, что ++i немного более эффективен, так как не нужно помнить старое значение i. Это очень простая оптимизация компилятора, одна из немногих, которую фактически выполнит javac (большинство оптимизаций выполняется HotSpot во время выполнения).

Вы можете в целом доверять javac, чтобы не нарушать вашу программу; это довольно хорошо проверенный компилятор, и было бы очень удивительно, если бы он сломал что-то основное, как цикл for.

3

Нет, это не влияет на ваш код в любом случае. Несмотря на то, что стандартная идиома в for-loop равна int i = 0;i < 10; i++, поведение идентично, если последний термин является преинкрементом.

+0

Хм ... пока изображения работают на моей локальной машине, но не работают в нашем доменном поле, где используется банка. Чтобы быть честным, я до сих пор не изучил другие возможности. – stackMan10

+0

@ stackMan10 и изображения находятся внутри банки? Как правильно загрузить их? (используя 'getResourceAsStream()') – Tom

+0

Нет ... Я создаю pdf, используя apache fop из html. Изображение src в html начинается с «images/someImage.png» ... поэтому для отображения изображения в формате pdf мне нужно добавить «http: // myapp/common /» в изображение src, чтобы отобразить изображение , Что по какой-то причине не работает. – stackMan10

Смежные вопросы