byte udn integer

MinaM

Mitglied
Hallo Zusammen,

ich habe folgendes Programmfragment;
Code:
		byte v,s;
		
		s=1;
		v=125;
		
		v = v + s;

Warum beanstandet der Compiler die Zeile v = v+s
v und s sind jeweils als byte deklariert.
das Ergebnis von v+ s müsste doch dann auch byte sein? Oder?

Der Compiler sagt aber man kann int nicht in byte speichern.

Kann mir das vielleicht jemand erklären?

vielen Dank und Grüße
Mina
 
Hallo,
hab grad mal ein bisschen gestöbert:
laut "Java ist auch eine Insel" gilt für Operationen mit Variablen vom
Typ < int folgendes:

Probleme bei Zuweisungen

Leider ist die Typanpassung nicht ganz so einleuchtend, wie folgendes Beispiel zeigt:

Listing 2.4 AutoConvert.java
Code:
public class AutoConvert
{
  public static void main( String args[] )
  {
    int   i1 = 1, i2 = 2, i3;
    long  l1 = 1, l2 = 2, l3;
    short s1 = 1, s2 = 2, s3;
    byte  b1 = 1, b2 = 2, b3;
    i3 = i1 + i2;              // das ist noch OK
    l3 = l1 + l2;
//    s3 = s1 + s2;              // Compilerfehler!
//    b3 = b1 + b2;
    s3 = (short) ( s1 + s2 );  // das ist wieder OK
    b3 = (byte)  ( b1 + b2 );
  }
}
Dies ist auf den ersten Blick paradox. Es ist nicht möglich, ohne explizite Typumwandlung zwei short- oder byte-Zahlen zu addieren. Das Verhalten des Übersetzers lässt sich mit der automatischen Anpassung erklären. Wenn Ganzzahl-Ausdrücke vom Typ kleiner int mit einem Operator verbunden werden, passt der Compiler eigenmächtig den Typ auf int an. Die Addition der beiden Zahlen arbeitet also nicht mit short- oder byte-Werten, sondern mit int-Werten. So werden auch Überläufe korrekt behandelt.

Bei der Zuweisung wird dies zum Problem. Denn dann steht auf der rechten Seite ein int und auf der linken Seite der kleinere Typ byte oder short. Nun muss der Compiler meckern, da Zahlen abgeschnitten werden könnten. Mit der ausdrücklichen Typumwandlung erzwingen wir diese Konvertierung und akzeptieren ein paar fehlende Bits. Diese Eigenart ist insofern verwunderlich, als dass doch auch ein int nur dann zu einem long erweitert wird, wenn einer der Operanden eines Ausdrucks vom Typ long ist.

Gruß

RedWing
 
Zurück