Frage

Hier ist der Code-Snippet:

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

Die Ausgabe lautet:

195

Warum ist dies der Fall? Ich würde denken, dass 'a' + 'b' wäre entweder "ab", "12" oder 3.

Was ist hier los?

War es hilfreich?

Lösung

+ von zwei char ist arithmetische Addition, nicht String-Verkettung. Sie haben so etwas wie "" + ca + cb zu tun, oder Verwendung String.valueOf und Character.toString Methoden, um sicherzustellen, dass mindestens einer der Operanden von + ist ein String für die Bediener String-Verkettung zu sein.

JLS 15.18 Additive Operatoren

  

Wenn die Art der beiden Operanden eines + Operator String ist, dann ist die Operation String-Verkettung.

     

Ansonsten ist die Art von jedem des Operanden des + Betreibers muss ein Typ sein, der zu einem primitiven numerischen Typ konvertierbar ist, oder ein Fehler bei der Kompilierung auftritt.

Wie, warum Sie bekommen 195, es ist, weil in ASCII, 'a' = 97 und 'b' = 98 und 97 + 98 = 195.


Dies führt grundlegende int und char Guss.

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

Dies ignoriert das Thema Zeichencodierungsschemata (die ein Anfänger nicht zu kümmern soll ... noch!).


Als Hinweis, Josh Bloch stellte fest, dass es eher bedauerlich, dass + sowohl für String-Verkettung und Integer-Addition überlastet ist ( „Es kann ein Fehler gewesen den Operator + für String-Verkettung zu überlasten.“ - Java Puzzler , Puzzle 11: The Last Laugh). Viele dieser Arten von Verwirrung durch eine unterschiedlichen Token für String-Verkettung leicht vermieden haben könnten.


Siehe auch

Andere Tipps

Ich spreche kein Java, aber 195 ist 97 + 98 = der ASCII-Codes für a und b. So offensichtlich, ca und cb als ihre ganzzahlige Werte interpretiert, wahrscheinlich wegen des + hinaus, die scheint nicht automatisch zu einer String-Verkettung zu führen.

Wenn Sie einen String haben als Ergebnis der + Operator als Operanden zu verwenden Typ String haben.

Sie sollten schreiben:

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

Der Operator + angewendet auf char Operanden verhält sich wie die arithmetische Summe.

Der + Operator funktioniert nicht Zeichen über wie es Strings funktioniert über. Was geschieht hier ist, dass a und b sind Wurfs auf ihre ganze Zahl ASCII Codepoints - 97 und 98 -. Und dann addiert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top