in Java,Casting Regeln für primitive Typen in Java
Es sind integrale Typen (char
/short
/int
/long
/byte
)
Es gibt Gleitpunkttypen (float
/double
)
Es ist ein boolescher Typ (boolean
), nicht ein ganzzahliger Typ, im Gegensatz zur C-Sprache.
Frage 1)
Gibt es eine allgemeine Regel (gemäß JLS zum Gießen), dass die Gespräche, welche Art in einem anderen Typ umgewandelt werden können? Aus dem gesunden Menschenverstand, ich weiß, dass, Integral- und Floating-Typ boolean
Gießen nicht
Frage 2)
Bitte helfen Sie mir die Gründe für die unter Ausgabe zu verstehen:
/*
* Casting rules for primitive types
*/
double aDoubleValue = 30000000000000000000.123438934;
int doubleToInt = (int)aDoubleValue; //stores max value 2147483647, makes sense!!
byte doubleToByte = (byte)aDoubleValue; //stores -1, why not 127?
short doubleToShort = (short)aDoubleValue; // stores -1, why not 32767?
long doubleToLong = (long)aDoubleValue; // stores 9223372036854775807, makes sense!!
float doubleToFloat = (float)aDoubleValue; // stores 3.0E19, 3.0 x 10^19 max value of float
char doubleToChar = (char)aDoubleValue; // what does this store?
Die Regeln für primitive Typen sind eigentlich explizit angegeben: https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.2. zum Erweitern und https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3 zum Einschränken. – dhke
@dhke warum '(Byte) fmax' und' (kurz) fmax' ist -1 wie in 5.1.3? irgendein Grund? – overexchange
@overxchange - alles wird dort erklärt: "Die Ergebnisse können durch Untersuchung der niederwertigen Bits des minimalen und maximalen int verstanden werden. Der minimale int ist in hexadezimal 0x80000000 und der maximale int ist 0x7fffffff. Dies erklärt die kurzen Ergebnisse , die die unteren 16 Bits dieser Werte sind, nämlich 0x0000 und 0xffff, erklärt die char - Ergebnisse, die auch die niedrigen 16 Bits dieser Werte sind, nämlich '\ u0000' und '\ uffff'; Byte-Ergebnisse, die die niedrigen 8 Bits dieser Werte sind, nämlich 0x00 und 0xff. " – faramir