В Oracle "Примитивные типы данных" страница он упоминает, что Java 8 добавляет поддержку беззнаковых ints и longs:
int: По умолчанию тип данныхintпредставляет собой 32-разрядное двухзначное целочисленное целое число, которое имеет минимальное значение -2 31 и максимальное значение 2 31 -1. В Java SE 8 и более поздних версиях вы можете использовать тип данныхintдля представления 32-разрядного целого числа без знака, которое имеет минимальное значение 0 и максимальное значение 2 32 - 1. Используйте классIntegerдля использования типа данныхintкак целое число без знака. Дополнительную информацию см. В разделе "Классы номеров". Статические методы, такие какcompareUnsigned,divideUnsignedи т.д., Были добавлены в классIntegerдля поддержки арифметических операций для целых чисел без знака.
long: Тип данныхlong- это 64-битное целое число из двух дополнений. Подписанноеlongимеет минимальное значение -2 63 и максимальное значение 2 63 -1. В Java SE 8 и более поздних версиях вы можете использовать тип данныхlongдля представления беззнакового 64-битногоlong, который имеет минимальное значение 0 и максимальное значение 2 64 -1. Используйте этот тип данных, если вам нужен диапазон значений, отличный от значений, предоставляемых int. Классlongтакже содержит методы типаcompareUnsigned,divideUnsignedи т.д. Для поддержки арифметических операций для unsignedlong.
Однако я не нашел способа объявить unsigned long или integer. Следующий код, например, дает сообщение об ошибке компилятора "литеральный вне диапазона" (я, конечно, использую Java 8), когда он должен находиться в диапазоне (назначенное значение равно 2 64 -1):
public class Foo {
    static long values = 18446744073709551615L;
    public static void main(String[] args){
        System.out.println(values);
    }  
}
Итак, есть ли способ объявить unsigned int или long?