La citazione (dallo Java Language Specification §15.7) deve essere letta nel contesto di Evaluation Order. Come discusso here, quella sezione riguarda l'ordine di valutazione , che non è correlato all'operatore precedence (o associatività).
precedenza e influenza associatività la struttura dell'albero espressione (cioè quale operatori agiscono su cui operandi), mentre "ordine di valutazione" influenza unicamente l'ordine in cui l'albero di espressione è attraversato quando la espressione è valutata. L'ordine di valutazione (o "ordine trasversale") non ha alcun effetto a meno che alcune sotto-espressioni abbiano effetti collaterali che influenzano il risultato (o gli effetti collaterali) di altre sottoespressioni.
Ad esempio, se x == 1 inizialmente, l'espressione ++x/++x
sarebbe valutare come 2/3 (che restituisce 0) poiché Java è da sinistra a destra ordine di valutazione. Se l'ordine di valutazione in Java fosse stato da destra a sinistra, x sarebbe stato incrementato due volte prima della valutazione del numeratore e l'espressione sarebbe stata valutata come 3/2 (che valuta 1). Se l'ordine di valutazione fosse stato indefinito, l'espressione avrebbe potuto valutare uno di questi risultati.
La citazione in questione, insieme al suo contesto, ...
Java garantisce linguaggio di programmazione che gli operandi di operatori sembrano essere valutata in uno specifico ordine di valutazione, vale a dire, da sinistra a destra.
Si consiglia di non basare il codice su queste specifiche. codice è solitamente più chiaro quando ogni espressione contiene al massimo un effetto collaterale , come il suo funzionamento più esterno
... scoraggia il lettore dalla seconda sinistra a giustezza dell'ordine valutazione di Java (come in l'esempio sopra). Non incoraggia le parentesi inutili.
Modifica: risorsa: Java operator precedence table che funge anche da indice in sezioni del JLS contenenti la grammatica sintattica da cui viene dedotto ciascun livello di precedenza.
In caso di dubbio, aggiungere più parentesi. –
E quando ci sono troppe parentesi, refactoring. – trashgod
Quella citazione JLS (nel contesto) incoraggia la decomposizione di affermazioni che hanno più effetti collaterali (o effetti collaterali nelle sottoespressioni) per evitare l'incertezza sul tempo relativo di detti effetti collaterali nelle sotto-espressioni destra e sinistra. Questo non può essere ottenuto aggiungendo parentesi. In altre parole, il JLS sconsiglia di fare affidamento sull'ordine di valutazione * di Java *, non contro il fatto di basarsi sulla precedenza degli operatori. La differenza tra questi è spiegata [sotto] (http://stackoverflow.com/a/13353263/13353263) e [qui] (http://stackoverflow.com/a/6801431/230513). – Museful