Quando si effettua un incarico, il valore assegnato è considerato il "risultato" o il "valore di ritorno" dell'espressione. È sottile e forse non chiaro perché il tuo esempio è qualcosa che raramente viene eseguito.
Ad esempio:
int i = 5;
int j = (i = 6);
A questo punto del codice, sia i
che j
sono uguali a 6. We assegnato i al valore 6 e quindi catturato il valore di ritorno dell'espressione, che è il valore che è stato trasferito, che è 6.
Personalmente, eviterei questo perché può essere molto confuso e facile da introdurre bug. Soprattutto in un System.out.println o qualsiasi altra chiamata che non dovrebbe cambiare lo stato. Viola il principio del minimo stupore.
Ti sei mai chiesto perché le classi di programmazione ti insegnano a usare sempre un doppio equo ( ==
) in un'istruzione if? Hai mai notato che con un singolo segno di uguale, può ancora funzionare? Ecco perché. Il processo di valutazione di una condizione sta cambiando la condizione, creando un truismo o un falso. Il numero di difetti del software causati da if (x = y)
.....
Molti programmatori (non ho ancora preso l'abitudine, ma probabilmente dovrebbero) preferiscono scrivere se le dichiarazioni con la costante sul lato sinistro come if (5 == x)
invece di if (x == 5)
in modo che se usano accidentalmente un singolo uguale firmare, il compilatore non lo permetterà.
Per portare questo al tuo esempio di codice, hai ragione, l'espressione sta "restituendo" un valore.
String fruit;
System.out.println(fruit="Orange"); //prints orange
Quando JVM esegue questo codice, un'istruzione alla volta, vede 3 istruzioni in questo ordine:
String fruit;
String someInternalStackVariableYouDontSee = (fruit = "Orange");
System.out.println(someInternalStackVariableYouDontSee );