Đôi khi tôi thấy API sử dụng longhoặc Longhoặc inthoặ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 longhoặc Longhoặc inthoặ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:
Longlà Objecthình thức của long, và Integerlà hình thức đối tượng của int.
Việc longsử dụng 64 bit . Việc intsử 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 longvà 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.collectionscác phương thức thường sử dụng các Objectphiê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ư inthoặc long, không phải là một Object.
Một điểm khác biệt nữa là longvà intlà giá trị truyền qua , trong khi đó Longvà Integerlà 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 Longhoặ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 Longhoặc Integercó thể null.
Có một vài điều bạn không thể làm với kiểu nguyên thủy:
nullgiá trịObjectsTrừ 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ố.intquá nhỏ, sử dụng mộtlonglongquá nhỏ, sử dụngBigIntegerCollection, xử lý null, ...) hãy sử dụng Integer/ Longthay thếAn intlà số nguyên 32 bit; a longlà 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.
intvà longlà các kiểu nguyên thủy, trong khi Integervà Longlà 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 inttrong một Listtrực tiếp).
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647Long64 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
intbộ 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, Shortquá)
Bạn có thể sử dụng intmọi lúc, nhưng Integerchứ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