Trong Oracle "Primitive kiểu dữ liệu" trang , nó đề cập đến rằng Java 8 thêm hỗ trợ cho ints unsigned và chờ đợi:
int: Theo mặc định,intkiểu dữ liệu là một số nguyên bổ sung 32-bit có dấu của hai, có giá trị nhỏ nhất là −2 31 và giá trị lớn nhất là 2 31 −1. Trong Java SE 8 trở lên, bạn có thể sử dụngintkiểu dữ liệu để đại diện cho số nguyên 32 bit không dấu, có giá trị nhỏ nhất là 0 và giá trị lớn nhất là 2 32 −1. Sử dụngIntegerlớp để sử dụngintkiểu dữ liệu là một số nguyên không dấu. Xem phần Các lớp số để biết thêm thông tin. Các phương thức tĩnh nhưcompareUnsigned,divideUnsignedv.v. đã được thêm vàoIntegerlớp để hỗ trợ các phép toán số học cho các số nguyên không dấu.
long: Kiểulongdữ liệu là số nguyên bổ sung 64-bit hai của. Dấulongcó giá trị nhỏ nhất là −2 63 và giá trị lớn nhất là 2 63 −1. Trong Java SE 8 trở lên, bạn có thể sử dụnglongkiểu dữ liệu để biểu thị 64-bit không dấulong, có giá trị nhỏ nhất là 0 và giá trị lớn nhất là 2 64 −1. Sử dụng kiểu dữ liệu này khi bạn cần phạm vi giá trị rộng hơn giá trị được cung cấp bởi int. CácLonglớp cũng chứa các phương pháp thíchcompareUnsigned,divideUnsignedvv để hỗ trợ hoạt động số học cho unsignedlong.
Tuy nhiên, tôi không tìm thấy cách nào để khai báo một số nguyên hoặc dài không dấu. Ví dụ, đoạn mã sau đưa ra thông báo lỗi trình biên dịch "chữ nằm ngoài phạm vi" (tất nhiên là tôi đang sử dụng Java 8), khi nó phải nằm trong phạm vi (giá trị được gán chính xác là 2 64 −1) :
public class Foo {
static long values = 18446744073709551615L;
public static void main(String[] args){
System.out.println(values);
}
}
Vậy có cách nào để khai báo int unsigned hay long không?