Đôi khi tôi thấy API sử dụng long
hoặc Long
hoặc int
hoặc Integer
, và tôi không thể tìm ra quyết định được đưa ra cho điều đó như thế nào?
Khi nào tôi nên chọn cái gì?
Đôi khi tôi thấy API sử dụng long
hoặc Long
hoặc int
hoặc Integer
, và tôi không thể tìm ra quyết định được đưa ra cho điều đó như thế nào?
Khi nào tôi nên chọn cái gì?
Câu trả lời:
Long
là Object
hình thức của long
, và Integer
là hình thức đối tượng của int
.
Việc long
sử dụng 64 bit . Việc int
sử dụng 32 bit và do đó chỉ có thể giữ các số lên tới ± 2 tỷ (-2 31 đến +2 31 -1).
Bạn nên sử dụng long
và int
, ngoại trừ nơi bạn cần sử dụng các phương thức được kế thừa từ Object
, chẳng hạn như hashcode
. Java.util.collections
các phương thức thường sử dụng các Object
phiên bản được đóng hộp (loại bỏ), bởi vì chúng cần hoạt động cho bất kỳ Object
, và một kiểu nguyên thủy, như int
hoặc long
, không phải là một Object
.
Một điểm khác biệt nữa là long
và int
là giá trị truyền qua , trong khi đó Long
và Integer
là giá trị tham chiếu qua , giống như tất cả các loại Java không nguyên thủy. Vì vậy, nếu có thể sửa đổi một Long
hoặc Integer
(không phải, chúng không thể thay đổi mà không sử dụng mã JNI), sẽ có một lý do khác để sử dụng cái này hơn cái kia.
Một sự khác biệt cuối cùng là một Long
hoặc Integer
có thể null
.
Có một vài điều bạn không thể làm với kiểu nguyên thủy:
null
giá trịObject
sTrừ khi bạn cần bất kỳ thứ gì trong số đó, bạn nên thích các kiểu nguyên thủy, vì chúng cần ít bộ nhớ hơn.
int
, khi giữ số.int
quá nhỏ, sử dụng mộtlong
long
quá nhỏ, sử dụngBigInteger
Collection
, xử lý null
, ...) hãy sử dụng Integer
/ Long
thay thếAn int
là số nguyên 32 bit; a long
là số nguyên 64 bit. Cái nào sẽ sử dụng phụ thuộc vào số lượng lớn mà bạn muốn làm việc với.
int
và long
là các kiểu nguyên thủy, trong khi Integer
và Long
là các đối tượng. Các kiểu nguyên thủy hiệu quả hơn, nhưng đôi khi bạn cần sử dụng các đối tượng; ví dụ, các lớp học tập của Java chỉ có thể làm việc với các đối tượng, vì vậy nếu bạn cần một danh sách các số nguyên bạn có để làm cho nó một List<Integer>
, ví dụ (bạn không thể sử dụng int
trong một List
trực tiếp).
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Nếu việc sử dụng biến của bạn rơi vào phạm vi 32 bit, hãy sử dụng Int
, sử dụng khác long
. Thông thường dài được sử dụng cho các tính toán khoa học và những thứ như thế cần nhiều độ chính xác. (ví dụ: giá trị của pi).
Một ví dụ về việc chọn cái khác là trường hợp của YouTube. Đầu tiên, họ xác định bộ đếm lượt xem video là một
int
bộ lọc bị tràn khi hơn 2.147.483.647 lượt xem được nhận vào một video phổ biến. Do bộInt
đếm không thể lưu trữ bất kỳ giá trị nào nhiều hơn phạm vi của nó, YouTube đã thay đổi bộ đếm thành biến 64 bit và hiện có thể đếm tới 9.223.372.036.854.775.880 lượt xem. Hiểu dữ liệu của bạn và chọn loại phù hợp với biến 64 bit sẽ chiếm gấp đôi bộ nhớ so với biến 32 bit.
Khi nói đến việc sử dụng một số rất dài có thể vượt quá 32 bit để thể hiện, bạn có thể sử dụng lâu để đảm bảo rằng bạn sẽ không có hành vi lạ.
Từ Java 5, bạn có thể sử dụng các tính năng trong quyền anh và quyền anh để làm cho việc sử dụng int và Integer hoàn toàn giống nhau. Nó có nghĩa là bạn có thể làm:
int myInt = new Integer(11);
Integer myInt2 = myInt;
Trong và ngoài đấm bốc cho phép bạn chuyển đổi giữa int và Integer mà không cần bất kỳ chuyển đổi bổ sung (tương tự cho Long
, Double
, Short
quá)
Bạn có thể sử dụng int
mọi lúc, nhưng Integer
chứa một số phương thức trợ giúp có thể giúp bạn thực hiện một số thao tác phức tạp với số nguyên (chẳng hạn như Integer.parseInt(String)
)
a) Lớp đối tượng "Dài" so với kiểu nguyên thủy "dài". (Ít nhất là trong Java)
b) Có các kích thước bộ nhớ khác nhau (thậm chí không rõ ràng) của các loại nguyên thủy:
Java - tất cả đều rõ ràng: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. chỉ lộn xộn: https://en.wikipedia.org/wiki/C_data_types