Domanda

Ecco il frammento di codice:

public static void main (String[]arg) 
{
    char ca = 'a' ; 
    char cb = 'b' ; 
    System.out.println (ca + cb) ; 
}

L'output è:

195

Perché è questo il caso? Penserei che 'a' + 'b' sarebbe o "ab", "12" o 3.

Che cosa sta succedendo qui?

È stato utile?

Soluzione

+ di due char è aggiunta aritmetica, non concatenazione di stringhe. Devi fare qualcosa di simile "" + ca + cb, o utilizzare String.valueOf e Character.toString metodi per garantire che almeno uno degli operandi di + è un String per l'operatore di essere concatenazione di stringhe.

JLS 15.18 additivi Operatori

  

Se il tipo di uno degli operandi di un operatore + è String, l'operazione è concatenazione di stringhe.

     

In caso contrario, il tipo di ciascuno degli operandi dell'operatore + deve essere un tipo che è convertibile in un tipo numerico primitivo, altrimenti si verifica un errore di compilazione.

Per quanto riguarda il motivo per cui si sta ottenendo 195, è perché in ASCII, 'a' = 97 e 'b' = 98 e 97 + 98 = 195.


Questa esegue int e char fusione di base.

 char ch = 'a';
 int i = (int) ch;   
 System.out.println(i);   // prints "97"
 ch = (char) 99;
 System.out.println(ch);  // prints "c"

Questo ignora la questione di schemi di codifica dei caratteri (che un principiante non dovrebbe preoccuparsi ... ancora!).


Come nota, Josh Bloch ha notato che è piuttosto spiacevole che + è sovraccarico sia per la concatenazione di stringhe e l'aggiunta intero ( "Potrebbe essere stato un errore di sovraccaricare l'operatore + per la concatenazione di stringhe." - Java puzzlers , Puzzle 11: The last Laugh). Un sacco di questo tipo di confusione potrebbe essere stato facilmente evitato con un gettone differente per la concatenazione di stringhe.


Vedere anche

Altri suggerimenti

Non parlo di Java, ma 195 è 97 + 98 = i codici ASCII per a e b. Così, ovviamente, ca e cb sono interpretati come i loro valori interi, probabilmente a causa del l'aggiunta + che non sembra portare ad una concatenazione di stringhe automaticamente.

Se si desidera avere una stringa come risultato dell'operatore + è necessario utilizzare tipo String come operandi.

Si dovrebbe scrivere:

public static void main (String[]arg) 
{
    String ca = "a" ; 
    String cb = "b" ; 
    System.out.println (ca + cb) ; 
}

L'operatore + applicato su operandi char si comporta come somma aritmetica.

L'operatore + non funziona su personaggi come fa su stringhe. Quello che sta succedendo qui è che a e b vengono gettati alle loro interi Codepoints ASCII - 97 e 98 -. E poi sommati

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top