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,int
kiể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ụngint
kiể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ụngInteger
lớp để sử dụngint
kiể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
,divideUnsigned
v.v. đã được thêm vàoInteger
lớp để hỗ trợ các phép toán số học cho các số nguyên không dấu.
long
: Kiểulong
dữ liệu là số nguyên bổ sung 64-bit hai của. Dấulong
có 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ụnglong
kiể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ácLong
lớp cũng chứa các phương pháp thíchcompareUnsigned
,divideUnsigned
vv để 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?