In der Oracle „Primitive Datentypen“ Seite , erwähnt sie , dass Java 8 Unterstützung für unsigned ints und sehnt sich fügt hinzu:
int
: Standardmäßig ist derint
Datentyp eine 32-Bit-Zweierkomplement-Ganzzahl mit Vorzeichen, die einen Minimalwert von –2 31 und einen Maximalwert von 2 31 –1 hat. In Java SE 8 und höher können Sie denint
Datentyp verwenden, um eine vorzeichenlose 32-Bit-Ganzzahl darzustellen, die einen Minimalwert von 0 und einen Maximalwert von 2 32 −1 hat. Verwenden Sie dieInteger
Klasse, um denint
Datentyp als Ganzzahl ohne Vorzeichen zu verwenden. Weitere Informationen finden Sie im Abschnitt Die Zahlenklassen. Statische Methoden wiecompareUnsigned
,divideUnsigned
etc wurden die hinzugefügtInteger
Klasse , um die arithmetischen Operationen für ganze Zahlen ohne Vorzeichen zu unterstützen.
long
: Derlong
Datentyp ist eine 64-Bit-Zweierkomplement-Ganzzahl. Das Vorzeichenlong
hat einen Minimalwert von −2 63 und einen Maximalwert von 2 63 −1. In Java SE 8 und höher können Sie denlong
Datentyp verwenden, um ein vorzeichenloses 64-Bit darzustellenlong
, das einen Mindestwert von 0 und einen Höchstwert von 2 64 −1 hat. Verwenden Sie diesen Datentyp, wenn Sie einen Wertebereich benötigen, der breiter ist als der von int bereitgestellte. DieLong
Klasse enthält auch Methoden wiecompareUnsigned
,divideUnsigned
etc arithmetische Operationen für unsigned zu unterstützenlong
.
Ich finde jedoch keine Möglichkeit, ein vorzeichenloses Long oder eine Ganzzahl zu deklarieren. Der folgende Code gibt beispielsweise eine Compiler-Fehlermeldung aus: "Das Literal liegt außerhalb des Bereichs" (ich verwende natürlich Java 8), wenn es im Bereich liegen sollte (der zugewiesene Wert ist genau 2 64 −1). ::
public class Foo {
static long values = 18446744073709551615L;
public static void main(String[] args){
System.out.println(values);
}
}
Gibt es also eine Möglichkeit, ein Int oder Long ohne Vorzeichen zu deklarieren?