2010-02-04 2 views
53

Учитывая следующий вызов функции в C:Порядок выполнения настроек параметров в Java?

fooFunc(barFunc(), bazFunc()); 

Порядок исполнения barFunc и BazFunc не определен, поэтому barFunc() может быть вызвана перед bazFunc() или bazFunc() перед тем barFunc() в C.

Java Определяет порядок выполнения выражений аргумента функции или как C является неуказанным?

+0

Связанный вопрос: [Порядок выполнения методов, описывающих экземпляр и аргумент в Java?] (Http://stackoverflow.com/questions/13724952/order-of-execution-of-methods-describing-an -instance-and-the-argument-in-java/13725048) – bacar

ответ

59

С Java Language Specification (по выражениям):

15.7.4 Списки аргументов вычисляются слева направо

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

+8

Хотя это верно, пожалуйста, не кодируйте код таким образом, чтобы он зависел от порядка выполнения. Это просто сложность без добавления функциональности. – Jon

+7

Действительно, «рекомендуется, чтобы код не полагался на эту спецификацию». http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7 – trashgod

+30

@ Не согласен! если он указан в спецификации, то вы можете положиться на него. Например, чтобы прочитать прямоугольник из файла, я использую этот код: myRect = new Rectangle (scan.nextInt(), scan.nextInt(), scan.nextInt(), scan.nextInt()); Это кратким и простым. Более длительная реализация будет ненужной сложностью. –