Byte übergeben ohne cast?

Status
Nicht offen für weitere Antworten.

Beliar

Mitglied
Hallo!
Ich versteh java manchmal echt nicht -.-
Um speicher zu sparen habe ich byte statt int variablen benutzt. Schliesslich brauche ich eh keine werte über 10 oder so.
Wenn ich aber Zahlen literale als parameter übergeben will (die methode hat als parameter byte, byte,byte, byte.) bekomm ich nen fehler, weil man ja int nicht in byte speichern kann. Naja, dass 0 nicht in eine Byte variable passt ist mir neu...
Bei long kann man ja einfach zb 0L schreiben, gibts bei Byte eine ähnliche möglichkeit? Methode((byte) 0, (byte) 0, (byte) 0, (byte) 0) zu schreiben ist ja lächerlich x|

Btw, byte unterstütz doch vorzeichen, oder nicht (also von -2^7 bis +2^7).

Danke schonmal!
MFG Painkiller
 

meez

Top Contributor
Wie wärs mit Short?? => 8 bit, also byte...;)


Painkiller hat gesagt.:
Btw, byte unterstütz doch vorzeichen, oder nicht (also von -2^7 bis +2^7).

Byte ist byte...Also eine Abfolge von bits...Du musst das selber so interpretieren, wie du willst...
 

Beliar

Mitglied
0_o
Der Datentyp short ist 2 Byte lang (also 16 Bit), fasst somit das doppelte (von -2^15 bis 2^15-1).
Und was hilft mir das? Byte reicht völlig aus. Aber trotzdem wird ein literal standardmässig als int angesehen. Auch short ist kleiner als int und es gäbe das selbe problem.

edit:
hab das übersehen

Byte ist byte...Also eine Abfolge von bits...Du musst das selber so interpretieren, wie du willst...

Junge was redest du da? Auch ein int ist eine abfolge von bits, (4*8 Bits [da 4 Byte]), aber byte ist auch ein
primitiver Datentyp der Sprache Java (es gibt ihn auch in C, C++, Visual Basic...).
In der EDV ist alles eine abfolge von bits (bit heisst binary digit, also binäre zahl [0 oder 1]).
Vielleicht hätte ich nicht im anfänger Forum posten sollen.

Edit2:
Ach ja, ich hab nachgeschlagen im handbuch der Java Programmierung. Ein byte speichert -2^7 - 2^7-1.
 

meez

Top Contributor
Du hast natürlich Recht....
short ist natürlich signed 2^16 also -32.767 ... 32768, sowie byte signed -2^7 -1 .. 2^7 ist...
Hab den (byte) noch nie so gebraucht... auch nicht in C, nur z.B. zum Einlesen von Streams, und das hast du keine Zahlen, sondern einfach bits (Klar kann man aus jedem byte ein Zahlenwet machen...Das kann man aus jeder bit-Folge)...

War wohl besoffen...:oops:

Was dein Problem angeht:

Das Problem ist wahrscheinlich, das alle signed sind. Bei einer postitiven Zahl (<32768) sollte es ohne Probleme gehen. Bei einer negativen, wirds ein wenig schwieriger weil das erste bit an Stelle 32 eine 1 ist...
Obwohl das eigentlich auch kein grosses Problem darstellen sollte...???:L (Ist einfach ein shift)..
Ich denke, dass der automatische cast von int auf byte, so wie bei long auf int von den Java-Devs dies aus irgendeinem unerfindlichen Grund einfach nicht implementiert wurde.

Warum hast du am Anfang überhaupt int's? Warum nicht von Anfang an byte, wenn du sowieso nicht über 10 gehst...??
 

Marce

Mitglied
Warum hast du am Anfang überhaupt int's? Warum nicht von Anfang an byte, wenn du sowieso nicht über 10 gehst...??
Kann ja sein dass er ne Zahl übergibt und die muss er dann casten.
Aber wo loiegt das Problem beim casten?
sind 6 Zeichen mehr...oder?
Code:
bla = (byte) 10;
?!?
 

Isaac

Bekanntes Mitglied
Du kannst kein int an byte ohne cast übergeben (abgesehen von deklarationen).
Das ist ein Sicherheitsaspekt. In C++ geht das ohne Probleme und deshalb haben so viele Programme auch so viele Lücken. Java will das du dir im klaren bist das du Information verlierst und deshalb nötigt dich Java dazu den cast von Hand zu machen (übrigens eine der Einrichtungen wieso ich Java so schätze).
 

Beliar

Mitglied
meez hat gesagt.:
Du hast natürlich Recht....
short ist natürlich signed 2^16 also -32.767 ... 32768, sowie byte signed -2^7 -1 .. 2^7 ist...
Hab den (byte) noch nie so gebraucht... auch nicht in C, nur z.B. zum Einlesen von Streams, und das hast du keine Zahlen, sondern einfach bits (Klar kann man aus jedem byte ein Zahlenwet machen...Das kann man aus jeder bit-Folge)...

War wohl besoffen...:oops:

Was dein Problem angeht:

Das Problem ist wahrscheinlich, das alle signed sind. Bei einer postitiven Zahl (<32768) sollte es ohne Probleme gehen. Bei einer negativen, wirds ein wenig schwieriger weil das erste bit an Stelle 32 eine 1 ist...
Obwohl das eigentlich auch kein grosses Problem darstellen sollte...???:L (Ist einfach ein shift)..
Ich denke, dass der automatische cast von int auf byte, so wie bei long auf int von den Java-Devs dies aus irgendeinem unerfindlichen Grund einfach nicht implementiert wurde.

Warum hast du am Anfang überhaupt int's? Warum nicht von Anfang an byte, wenn du sowieso nicht über 10 gehst...??

was was was was?! Irgendwie reden wir aneinander vorbei. Auch ein int ist eine folge von bits. Eine folge von bits kann aber eine Zahl darstellen, zeichen oder einfach Maschinencode, je nachdem wie es dekodiert wird.
Der Datentyp byte in Java ist aber für das speichern von Zahlen gedacht. Ausserdem gibts in Java kein signed und unsigned.

Ausserdem muss ich mich falsch ausgedrückt haben. Ich habe nirgends ints, ich benutze nur bytes wegen der Platzersparniss da ich keine grösseren werte brauche. Aber alle literale (also wenn ich keine Variable übergebe sondern einfach 0 rein schreibe) werden standardmässig als int erkannt :/
Ich übergebe auch keine Werte die zu gross sind.
Um mal konkreter zu werden:
(Bei dem Beispiel sind alle Datentypen etc. wie in meinem Programm, ich hab nur die
namen geändert weil ich sie nicht auswendig kann und Eclipse nicht starten will ^^)

Konstruktor Foo(byte a, byte b, byte c, byte d)
wird aufgerufen in einer methode.
Aufruf:
Foo test = new Foo(0, 0, FHEIGHT, FWIDTH);
Die letzten beiden sind konstanten des typs byte.

Trotzdem erkennt Java die beiden 0 als ints an. Deshalb müsste ich casten was mir net in den kopf gehen will.
Ich meine, erstellt der compiler da 2 temorärer int variablen um die literale zu speichern und muss ich
deshalb nach byte casten? Das ist ja ur ineffizient. Dann spare ich am ende weniger Speicherplatz und verbrauche dazu noch mehr Rechenleistung. Ich glaub da wärs noch besser wenn ich mit int arbeite *grml*
Was wiederum völliger schmarn ist da ich keine so grossen werte habe -.-
 

meez

Top Contributor
Painkiller hat gesagt.:
was was was was?! Irgendwie reden wir aneinander vorbei. Auch ein int ist eine folge von bits. Eine folge von bits kann aber eine Zahl darstellen, zeichen oder einfach Maschinencode, je nachdem wie es dekodiert wird.


Ja....Sag ich doch...Schliesslich kannst du auch aus einem Jtable eine Zahl machen.. ..Wusste einfach nicht, dass Java
den Typ byte auch wirklich als natürlich Zahl interpretieren kann...


Painkiller hat gesagt.:
Der Datentyp byte in Java ist aber für das speichern von Zahlen gedacht. Ausserdem gibts in Java kein signed und unsigned.

Standardmässig sind alle signed...Du kannst unsigned gar nicht definieren...

Painkiller hat gesagt.:
Trotzdem erkennt Java die beiden 0 als ints an. Deshalb müsste ich casten was mir net in den kopf gehen will.
Ich meine, erstellt der compiler da 2 temorärer int variablen um die literale zu speichern und muss ich
deshalb nach byte casten?
Das ist ja ur ineffizient. Dann spare ich am ende weniger Speicherplatz und verbrauche dazu noch mehr Rechenleistung. Ich glaub da wärs noch besser wenn ich mit int arbeite *grml*
Was wiederum völliger schmarn ist da ich keine so grossen werte habe -.-


Die Frage ist, was ist Compiler und was ist Runtime....Es ist möglich, dass der Compiler, wenn er eine Zahl findet, diese zuerst mal einem int zuweist...Eventuell wird, wenn du das castest, im Runtime dann wirklich so gerechnet wie du das willst, d.h der Compiler sieht den Cast und erstellt den Bytecode direkt mit einem 0-byte Wert..Er übersetzt mit byte und nicht mit int....Oder er macht gar nichts, und lässt die VM die Zahlen immer schiften...(Casten)
 

Hassbrut

Aktives Mitglied
Ich weiss ja net, wie oft du die Methode aufrufst, aber diese x-mal 2 Cast-Operationen dürften die Performance wohl kaum so sehr runterziehen.

Ansonsten nimm halt int.


Ich finde, Isaac hat 'nen vernünftigen Grund für dieses "Problem" gepostet...
 
B

Beni

Gast
Die Grundfrage ist aber noch immer nicht beantwortet (das würde ich nämlich auch gerne wissen).

Als Bsp mal double / float:

Code:
double d = 12.34;  // geht
float f = 12.34; // geht natürlich nicht
float f = 12.34f;  // korrekter Java-Syntax, und funktioniert

Also, gibt es eine Entsprechung byte - "?" wie float - "f"?


Jemand hat mal geschrieben, "6 Zeichen mehr".

Aber man kann das auch anders sagen:

Code:
int i = 1; // 1 Zeichen
byte b = (byte)1; // 7 Zeichen
Auf der zweiten Zeile muss man 600% mehr schreiben. 600% ist aber eine ziemlich grosse Zahl :wink:
 

Illuvatar

Top Contributor
Hab auch grad rumprobiert und gesucht, aber nix gefunden. 1b geht leider nicht.

Komisch ist ja, dass das funzt:
Code:
byte b = 1;
aber wenn die Variable übergeben wird, klappt eben nicht ???:L
 

Isaac

Bekanntes Mitglied
ne einen Byte Identifier gibts nicht, jedenfalls ist mir keiner Bekannt.

Das "byte b = 1" geht ist ein ganz andere Geschichte. Da befinden wir uns bei der Deklaration, da geht Java davon aus das du weist was du tust da du ja explizit ein byte verlangst. Wenn man aber einer Methode eine Zahl übergibt und die Methode erwartet byte dann kann im worst case fall Information flöten gehen und das verhinderet Java indem du explizit casten must.


Was meist du wie oft ich in Cpp schon über so scheiss Fehler gestolpert bin weil irgend ein Rind einen wchar auf char gecastet hat.
 

Beliar

Mitglied
Ok, das versteh ich ja. Es ist gib nen informationsverlust wenn man nen int in ein byte quetschen will.
Aber an einen byte parameter keine 0 übergeben zu dürfen :/
Schon klar dass es keinen grossen/keinen geschwindigkeits verlust gibt, aber irgendwie gefällts mir
rein "Optisch" nicht :/

Naja, ich werd wohl nicht drum herum kommen. Auf jedenfall danke.

MFG Painkiller
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
G ImageIcon in Byte-Array ablegen Java Basics - Anfänger-Themen 7
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
F byte, short oder doch int? Java Basics - Anfänger-Themen 6
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
D Methoden int to byte array und zurück? Java Basics - Anfänger-Themen 5
P int zu byte Java Basics - Anfänger-Themen 8
F Byte Array wachsen lassen Java Basics - Anfänger-Themen 5
M Java Klasse Byte Java Basics - Anfänger-Themen 10
F Byte Ausgabe plötzlich falsch Java Basics - Anfänger-Themen 0
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
O Input/Output Ein (negatives) Byte über PrintWriter hinausschreiben Java Basics - Anfänger-Themen 3
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
J byte - Ausgabe Java Basics - Anfänger-Themen 2
S byte to float Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
M sehr großes Byte Array Java Basics - Anfänger-Themen 3
M Byte Array und Co. Java Basics - Anfänger-Themen 12
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3
Y File to byte[] and byte[] to sysout Java Basics - Anfänger-Themen 3
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
P String in byte konvertieren, wie? Java Basics - Anfänger-Themen 4
T Erste Schritte Byte Java Basics - Anfänger-Themen 3
R byte[] zu String und Ausgabe Java Basics - Anfänger-Themen 2
H Variablen short <-> byte[] Java Basics - Anfänger-Themen 15
X Datentypen String in byte[] Java Basics - Anfänger-Themen 29
H Variablen 32bit Zählwert als Byte-Array Java Basics - Anfänger-Themen 9
H Variablen string nach byte Java Basics - Anfänger-Themen 12
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
R Erste Schritte Rechnenoperationen mit byte, short und char Java Basics - Anfänger-Themen 8
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
S ArrayList<Byte> in String umwandeln Java Basics - Anfänger-Themen 5
V unsigned byte? Java Basics - Anfänger-Themen 27
M byte Array Mindestlänge Java Basics - Anfänger-Themen 19
U short[] nach byte[] Java Basics - Anfänger-Themen 11
D [jni] jbytearray <-> byte array Java Basics - Anfänger-Themen 8
S Datentypen Ändern eines byte[] Arrays Java Basics - Anfänger-Themen 4
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
S Input/Output String in byte umwandeln? Java Basics - Anfänger-Themen 5
F von Byte zu 2 Stellig Hex Java Basics - Anfänger-Themen 3
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
F Byte nach Zahl umwandeln Java Basics - Anfänger-Themen 11
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
T Datentypen unsigned byte? Java Basics - Anfänger-Themen 9
G Integar zu Byte Java Basics - Anfänger-Themen 4
P Byte mit 0...255? Java Basics - Anfänger-Themen 5
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
L Umwandlung int <--> byte Java Basics - Anfänger-Themen 2
L Datentypen 250 und byte? Java Basics - Anfänger-Themen 4
L Datentypen byte[] in String und wieder zurück Java Basics - Anfänger-Themen 3
H Datentypen Byte-Array RSA Java Basics - Anfänger-Themen 9
H Datentypen Rechnen mit signed Byte-Array - unsinged byte Java Basics - Anfänger-Themen 3
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
V Byte -> String -> Byte verlustfrei Java Basics - Anfänger-Themen 12
Hindi93 Byte to Int Java Basics - Anfänger-Themen 4
H Datentypen byte[] to int Java Basics - Anfänger-Themen 9
S hex zu byte Java Basics - Anfänger-Themen 4
M Byte Array: Werte größer 127? Java Basics - Anfänger-Themen 11
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
H 1 Byte Status Variable Java Basics - Anfänger-Themen 3
P Datentypen Byte und char Typecast Java Basics - Anfänger-Themen 2
M Bit/Byte Operationen Java Java Basics - Anfänger-Themen 8
W Datentypen int -> byte Java Basics - Anfänger-Themen 2
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
F Typenumwandlung byte <=> int verstehen Java Basics - Anfänger-Themen 3
S Byte eines arrays Java Basics - Anfänger-Themen 17
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
B unsigned byte Problem Java Basics - Anfänger-Themen 9
S 2 Byte Arrays addieren Java Basics - Anfänger-Themen 45
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
S Alle Datentypen in byte Array und zurückwandeln Java Basics - Anfänger-Themen 2
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
Z Wie Byte[] in einen String oder int konvertieren Java Basics - Anfänger-Themen 2
0 byte[] -> hex Java Basics - Anfänger-Themen 2
G char[] in byte[] konvertieren? Java Basics - Anfänger-Themen 2
V Byte Arrays in Strings umwandeln und splitten Java Basics - Anfänger-Themen 2
M unsigned byte Java Basics - Anfänger-Themen 4
F Byte 0 und 1 einzelnd zuweisen? Java Basics - Anfänger-Themen 17
G byte [] aus uRL erhalten Java Basics - Anfänger-Themen 11
J Byte-Array als Hex-Datei speichern? Java Basics - Anfänger-Themen 9
G Hex to Byte Java Basics - Anfänger-Themen 13
S Byte in Zahl umwandeln Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben