Wieso ändern sich die Werte?

Aber wieso ist die Ausgabe bei...
Code:
(char)i1+i2+"\t"...
i1=50 i2=70
...120?
Dann wird das doch nicht als String ausgegeben.
Ansonsten würde da doch 270 stehen oder nicht?

EDIT:
Oder ist das abhängig davon, ob zuvor schon nen String stand?
z.B.
(""+(char)i2+i1)
ist das anderes als
((char)i2+i1) oder?
 
Zuletzt bearbeitet:
Code:
((char)i1+i2+"\t"+(char)i2+i1
Aber
Code:
(char)i1+i2...
ist doch eigentlich ein string oder?
Müsste es dann nich 270 sein statt 120 wenn es nen string ist?
270 wegen char50=2 pluse 70 geschrieben als string 270.
Code:
+(char)i2+i1
wird ja als string ausgegebn das verstehe ich auch
F50
 
Zuletzt bearbeitet:
Das ,+' macht deine 2 Chars automatisch in der Ausgabe zu einem String. (string concatenation operator)

Java:
char a = 'a';
char b = 'b';
String s = a + b;
Geht nicht(Fehler). Für eine korrekte Zeichenkette würde auch das nicht gehen.....
Java:
char a = 'a';
char b = 'b';
String s = String.valueOf(a+b);
Um eine richtige Zeichenkette zu erzeugen müsstest du das hier machen......
Java:
char a = 'a';
char b = 'b';
String s = String.valueOf(a) + String.valueOf(b);

Um ohne zusätzlichem String in der Ausgabe die richtige Zeichenkette auszugeben, müsste es dann so lauten....
Java:
char a = 'a';
char b = 'b';
System.out.println( a + "" + b);


Und deine Frage mit dem Ergebnisse, warum ..z.b.
Java:
char a = '1';
char b = '2';
System.out.println(a + b); // 
// Ausgabe 99
dürfte dann an der addition der binärwerte liegen.. glaub ich^^
 
Zuletzt bearbeitet:
Code:
(char)i1+i2...

Ist kein String. Deswegen rechnet er es zusammen. Danach kommt

Code:
+"\t"

Dieses "+" bedeutet, er soll die beiden Sachen (das Ergebnis der Rechnung davor und das "\t") konkatenieren, also aneinander hängen. Dazu muss er das Ergebnis aus "(char)i1+i2" in einen String umwandeln. Das Ergebnis davon ist dann "120\t".

Danach kommt das "+(char)i2". Dabei wandelt er erst den integer-Wert in einen char (also Zeichen) um. Er macht also "(char)i2 = 'F'" bevor er das an den String ran hängt, also:

Code:
"120\t"+"F"

Das Ergebnis ist "120\tF" und dann kommt halt an den String noch

Code:
"120\tF"+i1

Das Ergebnis davon ist dann "120\tF50"
 
Edit:
Deine i1 ist doch eine int, oder ? ... du castest sie erst in eine char um.

Hier noch was bezüglich Klammern
Java:
      char a = '9';
      char b = '1';
      System.out.println((char)(a + b)); // Ausgabe j

     System.out.println(a+b); // Ausgabe 106
    /* Alternativ auch
      System.out.println((char)(a) +(char)(b));
      System.out.println((char)(a) + b);
     Ist aber alles das gleiche...*/

Es macht also nen großen Unterschied, ob man Klammern setzt oder nicht
 
Zuletzt bearbeitet:
das mit den klammern verstehe ich
nur ich verstehe nicht wieso aus
Code:
(char)i1+i2
nicht
(char)i1= laut ascii "2"
i2=70
nicht 270 werden sondern einfach
50+70=120 obwohl dort ja eigentlich ein CHAR steht.
 
"char" hat eine Größe von 16 bit. Wichtig: Ein "char" ist kein String!

Wenn dann da sowas steht "char + int" kann nur entweder eine Fehlermeldung kommen, oder er führt einen automatischen typecast durch. Es kommt kein Fehler, also gibts den typecast. Aber in was soll er casten? Du erwartest einen String. Dafür gibts aber keinen grund, weil weder das linke, noch das rechte ein String ist. Es kommen nur die beiden Datentypen infrage.

Ich habe oben geschrieben dass ein "char" 16 bit hat. Ein "int" aber hat schon 32 bit. Man kann also "int" nicht in "char" konvertieren ohne dass man einen Datenverlust riskiert. Andersrum geht das also ohne weiteres. Also macht er das einzige was möglich ist: Er konvertiert das "char" in einen "int".
 
Zurück