En la página "Tipos de datos primitivos" de Oracle , se menciona que Java 8 agrega soporte para entradas y longs sin firmar:
int: De forma predeterminada, elinttipo de datos es un entero de complemento a dos con signo de 32 bits, que tiene un valor mínimo de −2 31 y un valor máximo de 2 31 −1. En Java SE 8 y versiones posteriores, puede utilizar elinttipo de datos para representar un entero de 32 bits sin signo, que tiene un valor mínimo de 0 y un valor máximo de 2 32 −1. Use laIntegerclase para usarintel tipo de datos como un entero sin signo. Consulte la sección Las clases de números para obtener más información. Se han agregado métodos estáticos comocompareUnsigned,divideUnsignedetc. a laIntegerclase para admitir las operaciones aritméticas para enteros sin signo.
long: Ellongtipo de datos es un entero de complemento a dos de 64 bits. El signolongtiene un valor mínimo de −2 63 y un valor máximo de 2 63 −1. En Java SE 8 y posterior, puede utilizar ellongtipo de datos para representar un 64 bits sin firmarlong, que tiene un valor mínimo de 0 y un valor máximo de 2 64 −1. Utilice este tipo de datos cuando necesite un rango de valores más amplio que los proporcionados por int. LaLongclase también contiene métodos comocompareUnsigned,divideUnsignedetc. para admitir operaciones aritméticas para unsignedlong.
Sin embargo, no encuentro forma de declarar un número entero o largo sin firmar. El siguiente código, por ejemplo, da un mensaje de error del compilador de "el literal está fuera de rango" (estoy usando Java 8, por supuesto), cuando debería estar dentro del rango (el valor asignado es precisamente 2 64 -1) :
public class Foo {
static long values = 18446744073709551615L;
public static void main(String[] args){
System.out.println(values);
}
}
Entonces, ¿hay alguna forma de declarar un int o long sin firmar?