Exercise "Strange things happen "





  • Habe ich das richtig verstanden, dass der Increment Operator ++ also immer automatisch typecasted und hier z.B. das Ergebnis der Rechnung als byte speichert, während der + Operator bei der Rechnung b+1 die Variable b in ein int umwandelt und daher die Fehlermeldung erscheint?



  • @Behringer

    Die Wirkung entspricht einem Cast. Dies wird bei einer ersatzweisen Operation an einer »Stellvertreter« Variablen copy_of_b vom Typ int sichtbar:

    byte b = 127;
    
    int copy_of_b = b; // Widening
    
    copy_of_b++;
    
    b = (byte) copy_of_b;
    
    System.out.println("copy_of_b = " + copy_of_b);
    System.out.println("b = " + b);
    

    Ergebnis:

    copy_of_b = 128
    b = -128
    

    Ich würde es aber gar nicht so kompliziert betrachten: Der »++« Operator repräsentiert die binäre Addition des Werts 1 auf Maschinenebene, wobei ein möglicher Überlauf verworfen wird. So, wie es im Skript dargestellt ist.

    Genau das Selbe passiert z.B. auch bei einer long Variablen, für welche es in Java ja gar keinen »größeren« Typ gibt:

    long l = Long.MAX_VALUE;
    System.out.println("Vorher:" + l);
    l++;
    System.out.println("Nachher:" + l);
    

    Ergebnis:

    Vorher:9223372036854775807
    Nachher:-9223372036854775808
    

Log in to reply