konvertierung/char/int

  • Themenstarter Themenstarter dzus
  • Beginndatum Beginndatum
D

dzus

Gast
warum geht das:

Java:
int i = 5;
char c = 0;
c += i;

aber nicht das folgende..:

Java:
int i = 5;
char c = 0;
c = c + i;

Java:
int i = 5;
char c = i;
 
beim ersten wird c direkt um 5 erhöht. beim zweiten wird c und i addierst und erst dann c zugewießen. der unterschied liegt daran, dass beim zweiten die addition einen int ergibt und dieser int nicht in den char passen könnte. d.h. man bräuchte hier einen expliziten cast. beispiel 3 ist das selbe: int ist größer als char und würde bei der zuweißung in einen char evtl. datenverlust bedeuten > expliziter cast erforderlich
 
hab ich doch grad gesagt. beim ersten wird c direkt um i erhöht. beim zweiten wird es erst addiert, das ergibt einen int und dann wird dieser int dem char zugewießen.
 
ein int passt nicht in einen char, höchstens per cast mit möglichen Verlust
bei += wird interessanterweise automatisch gecastet, bzw. je nach Interpretation eben 'c direkt um 5 erhöht'
 
Code:
+=
ist nur die Kurzschreibweise, und addiert/erhöht wird in beiden fällen. wo bitte ist der unterschied.
 
was immer du an 'anderen' meinst, kannst du das nicht selber ausprobieren?
für ein Beispiel nehme ich dir aber diese unendliche Mühe ab:
Java:
public class Test {

    public static void main(String[] args)  {
        int i = 5000;
        i /= 2.3;
        System.out.println(i);
    }
}
funktioniert anscheinend, Ausgabe 2173
 
Code:
+=
ist nur die Kurzschreibweise, und addiert/erhöht wird in beiden fällen. wo bitte ist der unterschied.

Das hatten wir glaub schon mal an anderer Stelle (war das in der Rätselecke?), dass das eben nicht in allen Fällen genau dasselbe ist.

Das Folgende
Java:
        char c = 'a';
        c += 1;
        c = c + 1;
meldet auf Zeile 3 einen Fehler. Das sind eben die ziemlich sinnbefreiten Effekte die entweder nirgendwo beschrieben sind oder deren Beschreibung so gut versteckt ist, dass man sie nicht findet.

(Würde mich ja sehr wundern wenn das so geplant gewesen wäre :bahnhof: )
 
Java:
        char c = 'a';
        c += 1;
        c = c + 1;

Man könnte es so verstehen:

Java:
        c = c + (char) 1;

oder so:

Java:
        c = (char) ((int) c + 1);

Was in diesem Fall keinen großen Unterschied machen würde. Dass es sinnfrei ist, da stimme ich dir zu. Ob es ungewollt ist, das weiß ich nicht. Weiß jemand, wo etwas dazu in der JLS Erwähnung findet oder welche Regel man sich merken könnte?

@SlaterB: Was ist daran so schwer zu verstehen, ob es in gleicher Weise auch für andere primitive Datentypen und Operatoren gilt. Verstehst du das Wort "andere" nicht? Dann kauf' dir mal 'ne Tüte deutsch.
 
ist doch wahr, so zu tun, alsob man blöd wär, nur weil man ne frage gestellt hat.... sag ich nichts mehr zu
 
pff als Gast hätte ich mich das auch getraut 😀
Der Unterschied sieht so aus:
Java:
int i = 5
char c = 0;
c = c + i;
Der Operator "+" für die Typen "char" und "int" gibt ein "int" zurück, das hier ist dasselbe:
Java:
int i = 5
char c = 0;
int cPlus = c + i
c = cPlus; // geht nicht, int passt nicht in char!
Denn char hat 16 bits (2 bytes), int 32 bits (4 bytes).
So hab ich das verstanden 😉

Java:
int i = 5
char c = 0;
c += i;
Das ist eine eigenart von Java, warum es hier einfach so geht, kann ich dir nicht sagen. Da wird wohl ein Programmierer einen automatischen Cast von X auf char eingebaut haben.
 
danke. das hieße, hier wird eine expliziter cast zum impliziten cast nach ende der arithmetische operation.

da + m.W. sowieso nur mit int funktioniert (bei ganzzahltypen <= int), wird vorher (generell implizit) char zu int und dann eben int zu char.
 

Neue Themen


Zurück
Oben