concatenazione di stringhe e numeri Java

Perché l’output è diverso in questi casi?

int x=20,y=10;

System.out.println("printing: " + x + y); ==> stampa: 2010

System.out.println("printing: " + x * y); ==> stampa: 200

Perché non è la prima uscita 30? È legato alla precedenza degli operatori? Come prima “stampa” e x sono concatenati e quindi questa stringa risultante e y sono concatenati? Ho ragione?

BODMAS regola di BODMAS

Sto mostrando l’ordine di precedenza qui sotto da Superiore a Basso:

 B - Bracket O - Power DM - Division and Multiplication AS - Addition and Substraction 

Funziona da Left to Right se gli operatori hanno la stessa precedenza

Adesso

System.out.println("printing: " + x + y);

"printing: " : è una stringa ”

"+" : È l’unico operatore in overload in Java che concatenerà Number to String. Dato che qui abbiamo 2 “+” operatore, e x + y cade dopo la "printing:" + come già fatto, sta considerando xey come anche stringhe.

Quindi l’output è il 2010.

System.out.println("printing: " + x * y);

Qui il

"*" : Ha una precedenza più alta di +

Quindi prima x*y poi printing: +

Quindi l’output è 200

Fallo così se vuoi 200 come output nel primo caso:

 System.out.println("printing: "+ (x+y)); 

L’ ordine di precedenza di Bracket è più alto in Addition .

La matematica di base ti dice che aggiungere numeri viene fatto ciascuno alla volta.

Quindi "printing: " + x è calcolato per primo. Siccome è una string + int il risultato è "printing: 20" . Quindi aggiungi y "printing: 20" + y uguale a "printing: 2010" .

Nel secondo caso, la moltiplicazione è prioritaria. Quindi il primo x * y è calcolato ed equivale a 200 . Quindi "printing: " + 200 uguale "printing: 200" .

I risultati che osservate sono certamente correlati alla precedenza degli operatori e anche all’ordine di valutazione . In assenza di un’altra regola, ovvero di un operatore con precedenza più elevata, gli operatori vengono valutati in ordine da sinistra a destra.

Nella prima espressione, tutti gli operatori hanno la stessa precedenza, perché sono lo stesso operatore: + , quindi viene valutata la prima operazione. Poiché coinvolge una String , è una concatenazione di String e il risultato è una String ; allo stesso modo per il seguente + .

Nella seconda espressione, uno degli operatori è * , che ha una precedenza più alta di + , e quindi viene valutato per primo. Si ottiene il risultato della moltiplicazione, un intero e quindi la concatenazione di una String e una int dovuta al + .

Questo stamperà 30 :

 System.out.println("printing: " + (x + y)) 

Hai bisogno delle parentesi per esprimere la precedenza che desideri.

È per la precedenza degli operatori

 System.out.println("printing: " + x * y); 

qui * l’operatore ha più precedenza di + quindi prima calcola x * y .

 System.out.println("printing: " + x + y); 

Dove come qui tutti sono lo stesso operatore e verrà trattato come operazione di concatenazione di stringhe in quanto è presente un valore di string .

se coinvolgi parentesi in questo – System.out.println (“stampa:” + (x + y));

Quindi parentesi (l’operatore ha più precedenza di +, quindi prima calcolerà (x + y) e stamperà 30

controllare dettaglio ordine di precedenza degli operatori

Nella prima riga di stampa, l’operatore + viene applicato prima tra la stringa e l’int e il risultato è una stringa che viene nuovamente concatenata con un altro int risultante in una stringa.

Nella seconda riga, l’ordine delle operazioni è: prima la moltiplicazione e il risultato int concatenato alla stringa.

System.out.println("2*("+a"+"+b"*"+c")")

Come stampare questo