Problema durante la stampa dei caratteri Differenza tra System.out.println ('A') e System.out.println (+ 'A') [chiuso]

0

Perché è così:

 System.out.println(+'A')   //gives output as 65

  System.out.println('A')   //gives output as A

Anche

 System.out.println(8+4+'A'+"PRIME"+4+4+'A');

fornisce l'output come 77PRIME44A

Perché 8 + 4 prima della stringa "Prime" sono aggiunti , mentre 4 + 4 dopo "Prime" vengono stampati così com'è ?

Ho anche un dubbio sul perché 8 + 4 + "A" abbia come risultato 65 (ascii di A) + 12 = 77 mentre 4 + 4 + 'A' non include A ascii che viene aggiunto?

C'è qualche regola o convenzione specifica riguardo a quanto sopra?

    
posta Excalibur 20.08.2016 - 19:54
fonte

1 risposta

1

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
    
risposta data 20.08.2016 - 20:41
fonte

Leggi altre domande sui tag