System.out.println(+'A') //gives output as 65
Nell'espressione +'A'
l'operatore unario più ( indica un numero intero positivo ) viene applicato a 'A'
e l'espressione ha senso solo se il char viene convertito a un int
. Il carattere 'A'
ha il valore int di 65 ( vedi la tabella ASCII ), che è il motivo per cui l'intera espressione valuta a 65, che poi viene stampato.
System.out.println(8+4+'A'+"PRIME"+4+4+'A');
gives output as 77PRIME44A
Why is it that 8+4 before the String "Prime" are being added, while 4+4 after "Prime" are being printed as it is ?
Poiché l' associatività di +
(sia per l'aggiunta di interi che per la concatenazione di stringhe) è lasciata- a destra. Quindi prima fai 8+4
, che è l'aggiunta di interi, quindi 12+'A'
(che richiede 'A'
per essere interpretato come il suo valore intero 65), e quindi hai +"PRIME"
. Ma questo ha senso solo come concatenazione di stringhe, motivo per cui risulta in "77PRIME"
; successivamente ogni chiamata a +
è una concatenazione di stringhe; gli interi vengono convertiti ai loro equivalenti di stringa (4 - > "4") e il risultato di un'operazione stringa + char non dovrebbe sorprenderti.
Quindi è
8+4+'A'+"PRIME"+4+4+'A'
--> ((((((8+4)+'A')+"PRIME")+4)+4)+'A') // placed explicit parenthesis
--> (((((12+'A')+"PRIME")+4)+4)+'A') // int addition 8+4
--> ((((77+"PRIME")+4)+4)+'A') // int addition, 'A' cast to int 65
--> ((("77PRIME")+4)+4)+'A') // string concat, 77 converted to "77"
--> (("77PRIME4"+4)+'A') // string concat, 4 --> "4"
--> ("77PRIME44"+'A') // ditto
--> "77PRIME44A" // string + char concat