2010-02-04 9 views
53

den folgenden Funktionsaufruf in C Gegeben:Reihenfolge der Ausführung von Parametern garantiert in Java?

fooFunc(barFunc(), bazFunc()); 

Die Reihenfolge der Ausführung von barFunc und BazFunc nicht angegeben ist, kann so barFunc() vor bazFunc() oder bazFunc() vor barFunc() in C aufgerufen werden.

Gibt Java eine Reihenfolge der Ausführung von Funktionsargumentausdrücken oder wie C ist das nicht angegeben?

+0

Frage: [Reihenfolge der Ausführung von Methoden, die eine Instanz und ein Argument in Java beschreiben?] (Http://stackoverflow.com/questions/13724952/order-of-execution-of-methods-scribing-an -instance-and-a-argument-in-java/13725048) – bacar

Antwort

59

Vom Java Language Specification (auf Expressions):

15.7.4 Argumentlisten ausgewertet Von links nach rechts

Bei einem Verfahren oder Konstruktor Aufruf oder Klasseninstanz Schöpfung Ausdruck, Argument Ausdrücke kann innerhalb von die Klammern, getrennt durch Kommas erscheinen. Jeder Argumentausdruck scheint vollständig zu sein, bevor irgendein Teil eines Argumentausdrucks rechts davon angezeigt wird.

+8

Während dies zutrifft, bitte bitte nicht so codieren, dass es von der Ausführungsreihenfolge abhängig ist. Es fügt einfach Komplexität hinzu, ohne Funktionalität hinzuzufügen. – Jon

+7

In der Tat, "Es wird empfohlen, dass Code nicht entscheidend auf diese Spezifikation angewiesen ist." http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7 – trashgod

+30

@Jon Ich stimme nicht zu! Wenn es in der Spezifikation ist, dann können Sie sich darauf verlassen. Um beispielsweise ein Rechteck aus einer Datei zu lesen, verwende ich diesen Code: myRect = new Rectangle (scan.nextInt(), scan.nextInt(), scan.nextInt(), scan.nextInt()); Es ist prägnant und einfach. Eine längere Implementierung wäre eine unnötige Komplexität. –