W Oracle „prymitywnych typów danych” strony , to mówi, że Java 8 dodaje wsparcie dla unsigned int i wyroby długie:
int: Domyślnieinttyp danych jest 32-bitową uzupełnienie dwójkowe liczbę całkowitą, która ma wartość minimalną -2 31 i wartość maksymalnej ilości 2 31 -1. W Java SE 8, a następnie, można użyćinttypu danych reprezentuje nieoznaczoną 32-bitową liczbę całkowitą, która ma wartość co najmniej 0 i wartości maksimum 2 32 -1. UżyjIntegerklasy, aby użyćinttypu danych jako liczby całkowitej bez znaku. Aby uzyskać więcej informacji, zobacz sekcję Klasy liczbowe. Do klasy dodano metody statyczne, takie jak itp.compareUnsigned, Aby obsługiwać operacje arytmetyczne na liczbach całkowitych bez znaku.divideUnsignedInteger
long: Typlongdanych to 64-bitowa liczba całkowita z uzupełnieniem do dwóch. Podpisanylongma wartość minimalną -2 63 i wartość maksymalnej ilości 2 63 -1. W Java SE 8, a następnie, można użyćlongtypu danych reprezentuje nieoznaczoną 64-bitowylong, który ma minimalną wartość 0, a wartość maksymalna z 2 64 -1. Użyj tego typu danych, gdy potrzebujesz zakresu wartości szerszego niż te podane przez int.LongKlasa zawiera również metody podobacompareUnsigned,divideUnsignedetc w celu wsparcia operacji arytmetycznych na niepodpisanelong.
Jednak nie znajduję sposobu, aby zadeklarować długość bez znaku lub liczbę całkowitą. Na przykład poniższy kod wyświetla komunikat o błędzie kompilatora „literał jest poza zakresem” (używam oczywiście Java 8), kiedy powinien znajdować się w zakresie (przypisana wartość to dokładnie 2 64 −1) :
public class Foo {
static long values = 18446744073709551615L;
public static void main(String[] args){
System.out.println(values);
}
}
Czy jest więc sposób na zadeklarowanie unsigned int lub long?