2016-06-07 6 views
1

Является ли это правильным синтаксисом для установки параметров ранее сгенерированного подготовленного состояния? Что происходит во-первых, добавление 1 к переменной i или использование переменной при настройке параметра?Порядок оценки при использовании оператора инкремента для установки значения параметров оператора

int i=1; 
for (TagInfo tag : scannedTags){ 
    //Pull the tag from the dbo.Tags table that matches the SiteID and TagOffSet values of the current tag in the alarm_tags list 
    //Set parameters for the prepared statement 
    dbStmtTag.setInt(i++, tag.getSiteID()); 
    dbStmtTag.setInt(i++, tag.getTagOffset()); 
} 

Если порядок операций является то, что значение увеличивается первым, я предполагаю, что я могу просто добавить 1 после установки параметра. Я просто прошу ради краткости в моем коде.

+0

Почему вы не просто попробовать и доказать это себе? Это заняло бы примерно столько же времени, сколько и просьба, и вы, вероятно, помните результат лучше, потому что «обучение по делу» работает лучше, чем «обучение слухом». –

+0

Мне нужно написать все тестовое приложение, которое будет работать с тестовой базой данных, которую мне нужно будет создать. В любом случае, я должен сделать это достаточно скоро, но я отвлекся, я просто надеялся на быстрый ответ на этот вопрос. – TheFunk

+2

Это принципиальное различие между '++ i' и' i ++ ', первое оценивает новое значение, второе - старое значение. – Holger

ответ

1

[Чтобы проверить поведение i++ для себя], я должен был бы написать целую тестовое приложение, которое общается с тестовой базой данных, которую мне нужно было бы создать.

Глупости. Все, что вам нужно будет сделать, это ...

public static void main(String[] args) { 
    try { 
     int i = 1; 
     System.out.printf("i is %d%n", i); 
     System.out.printf("i++ returned %d%n", i++); 
     System.out.printf("i is now %d%n", i); 
    } catch (Exception e) { 
     e.printStackTrace(System.err); 
    } 
} 

... который производит ...

i is 1 
i++ returned 1 
i is now 2 
+1

Попытка что-то не доказывает, что это гарантированное поведение. Это только доказывает, что это может случиться. – Holger

+0

@Holger - Это доказывает, что он * будет * произойти, по крайней мере, при условиях, описанных в тестовом коде. Утверждать иначе - значит сказать, что «мы никогда не можем быть уверены в том, что делает какой-либо из наших кодов» *. –

+2

Существует нечто, называемое [Спецификация языка Java] (https://docs.oracle.com/javase/specs/jls/se8/html/index.html), которая является авторитетной в отношении того, на что вы можете положиться, и что является просто совпадением (или даже ошибка). Тот факт, что этот конкретный оператор выполняет намеченное дело, не делает «просто попробуйте» * действительным способом проверки предположений о конструкциях языка Java. – Holger