Warum kann ich keine Bytes in Java addieren?
byte aByte = (byte) a;
byte bByte = (byte) b;
byte cByte = (byte) c;
byte dByte = (byte) d;
byte eByte = (byte) e;
byte fByte = (byte) f;
byte gByte = (byte) g;
byte hByte = (byte) h;
System.out.println (aByte);
System.out.println (bByte);
byte SumByte = aByte + bByte;
System.out.println (SumByte);
Die Variablen a bis h sind haben verschiedene Typen und da ich sie als Bytes addieren muss, habe ich sie auch in Bytes umgewandelt. Das Problem ist: ich kann sie trotzdem nicht addieren (der Wertebereich wird nicht überschritten, da aByte 14 und bByte 24 sind). Es kommt die folgende Fehlermeldung:
Error:(88, 30) java: incompatible types: possible lossy conversion from int to byte
Warum? Das ergibt für mich keinen Sinn.
2 Antworten
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Du musst es das Ergebnis explizit in byte casten. Java wandelt sicherheitshalber Ergebnisse in int um wenn zur Laufzeit der Wert nicht feststeht um eben keine Wertbereichsüberschreitung zu riskieren.
![](https://images.gutefrage.net/media/user/RedKungFuMastr/1459188224590_nmmslarge__223_0_1040_1040_a2c6eb7d3aaac0ce9d793bdc0a56cd6c.png?v=1459188225000)
Begründung, beim addieren von 2 Byte variablen entsteht ein Integer Wert...
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
Danke, es hat funktioniert :D
byte SumByte = (byte) (aByte + bByte + cByte + dByte + eByte + fByte + gByte + hByte);
![](https://images.gutefrage.net/media/user/RedKungFuMastr/1459188224590_nmmslarge__223_0_1040_1040_a2c6eb7d3aaac0ce9d793bdc0a56cd6c.png?v=1459188225000)
![](https://images.gutefrage.net/media/user/RedKungFuMastr/1459188224590_nmmslarge__223_0_1040_1040_a2c6eb7d3aaac0ce9d793bdc0a56cd6c.png?v=1459188225000)
Ok, kannst du mir dann verraten, welchen Wert jeweils die Variablen a bis h haben?
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
Ja, das Ganze schaut folgendermaßen aus:
int a = 0xe;
int b = 030;
long c = 18L;
double d = 4.44e1;
double e = 55.5;
double f = 66e-1f;
float g = 7.7f;
char h = 'F';
Mir ist schon klar, dass ich einen Überlauf haben werde wenn ich alles addiere, aber warum scheitert das schon bei 14 + 24?
![](https://images.gutefrage.net/media/user/RedKungFuMastr/1459188224590_nmmslarge__223_0_1040_1040_a2c6eb7d3aaac0ce9d793bdc0a56cd6c.png?v=1459188225000)
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
Bei:
byte SumByte = aByte + bByte;
Die Fehlermeldung ist sinnlos, beide sind vom Typ byte
![](https://images.gutefrage.net/media/user/RedKungFuMastr/1459188224590_nmmslarge__223_0_1040_1040_a2c6eb7d3aaac0ce9d793bdc0a56cd6c.png?v=1459188225000)
http://stackoverflow.com/questions/8120439/getting-the-wrong-number-when-converting-from-byte-to-int
Versuchs mit nem ByteBuffer, vielleicht klappts
![](https://images.gutefrage.net/media/user/RedKungFuMastr/1459188224590_nmmslarge__223_0_1040_1040_a2c6eb7d3aaac0ce9d793bdc0a56cd6c.png?v=1459188225000)
Ne verrückte Idee, was, wenn du die Summe nochmal als byte castest.
Wie gesagt, der Wertebereich von 128 wird nicht überschritten, das Ergebnis wäre 38 :/