Hallo allerseits!
Ich bin wohl ein etwas erfahrener Javaprogrammierer, da ich schon an die zwei Jahre in Javaprojekten involviert war. Wenn man etwas länger verwendet - und es gibt sicherlich hier Teilnehmer, die über zehn Jahre Erfahrung haben - kommen manchmal Fragen zu den Grundlagen auf.
In Java sind so wie in anderen Sprachen mathematische Operatoren definiert. Diese können auf die primitiven Datentypen
,
, und
angewendet werden, die ja nicht wirklich objektorientiert sind, da keine Klassen. Allerdings gibt es die arithmetischen Operation
,
,
, und
nicht wirklich für die primitiven Datentypen
und
. So wird bei einer speichermäßig minimalistischen Anwendung ein
nicht akzeptiert. Dasselbe gilt für den Typ
. Um die Operation auszuführen, wandelt der Übersetzer die Werte in diesem Falle in ein int um. Da das Resultat wieder ein
ist, muss man den speichermäßig größeren Wert selbst in den erwünschten Typen zurück umwandeln, also
Ähnlich gibt es "Missverständnisse" mit dem Übersetzer, wenn man
schreibt, da blindlings die Konstante als einen
sieht und deshalb eine Umwandlung oder Bezeichnung notwendig ist:
Ähnlich ist es in C#, wo ich gerade ein Projekt abgeschlossen habe.
Frage:
Warum können oder wollen die Übersetzer nicht mit manchen primitiven Datentypen operieren? Gibt es ein "Tao" dahinter, warum der Übersetzer bzgl. Datentyp einer Konstante voreingenommen ist?
Ich suche nach konkreten Antworten, die diese auch begründen können. Vermutungen habe ich selber auch.
Danke für die Auskunft!
PS: Ich habe im Web nach meiner Frage gesucht, aber nichts befriedigendes gefunden.
Ich bin wohl ein etwas erfahrener Javaprogrammierer, da ich schon an die zwei Jahre in Javaprojekten involviert war. Wenn man etwas länger verwendet - und es gibt sicherlich hier Teilnehmer, die über zehn Jahre Erfahrung haben - kommen manchmal Fragen zu den Grundlagen auf.
In Java sind so wie in anderen Sprachen mathematische Operatoren definiert. Diese können auf die primitiven Datentypen
Code:
int
Code:
long
Code:
double
Code:
+
Code:
-
Code:
*
Code:
/
Code:
byte
Code:
short
Java:
byte significantsAfterDecimal = 4;
byte significantsBeforeDecimal = 1;
byte significants = significantsAfterDecimal - significantsBeforeDecimal; // Fehler!
nicht akzeptiert. Dasselbe gilt für den Typ
Code:
short
Code:
int
Java:
byte significants = (byte)(significantsAfterDecimal - significantsBeforeDecimal);
Java:
float length = 4.3; // Fehler!
Code:
double
Java:
float length = 4.3f; // an Stelle von (float)4.3;
Frage:
Warum können oder wollen die Übersetzer nicht mit manchen primitiven Datentypen operieren? Gibt es ein "Tao" dahinter, warum der Übersetzer bzgl. Datentyp einer Konstante voreingenommen ist?
Ich suche nach konkreten Antworten, die diese auch begründen können. Vermutungen habe ich selber auch.
Danke für die Auskunft!
PS: Ich habe im Web nach meiner Frage gesucht, aber nichts befriedigendes gefunden.