Kadang-kadang saya melihat penggunaan API long
atau Long
atau int
atau Integer
, dan saya tidak tahu bagaimana keputusan dibuat untuk itu?
Kapan saya harus memilih apa?
Kadang-kadang saya melihat penggunaan API long
atau Long
atau int
atau Integer
, dan saya tidak tahu bagaimana keputusan dibuat untuk itu?
Kapan saya harus memilih apa?
Jawaban:
Long
adalah Object
bentuk dari long
, dan Integer
merupakan bentuk objek dari int
.
The long
menggunakan 64 bit . The int
penggunaan 32 bit, sehingga hanya bisa menampung angka sampai dengan ± 2 miliar (-2 31 ke +2 31 -1).
Anda harus menggunakan long
dan int
, kecuali jika Anda perlu menggunakan metode yang diwarisi dari Object
, seperti hashcode
. Java.util.collections
metode biasanya menggunakan versi kotak ( Object
-wrapped), karena mereka perlu bekerja untuk apa saja Object
, dan tipe primitif, seperti int
atau long
, bukan Object
.
Perbedaan lainnya adalah bahwa long
dan int
merupakan nilai-demi-nilai , sedangkan Long
dan Integer
merupakan nilai referensi yang dilewati , seperti semua tipe Java non-primitif. Jadi jika dimungkinkan untuk mengubah Long
atau Integer
(tidak, mereka tidak dapat diubah tanpa menggunakan kode JNI), akan ada alasan lain untuk menggunakan salah satu dari yang lain.
Perbedaan terakhir adalah bahwa a Long
atau Integer
bisa jadi null
.
Ada beberapa hal yang tidak dapat Anda lakukan dengan tipe primitif:
null
nilaiObject
sKecuali Anda membutuhkan salah satu dari itu, Anda harus memilih tipe primitif, karena mereka membutuhkan lebih sedikit memori.
int
, saat menahan angka.int
terlalu kecil, gunakan along
long
terlalu kecil, gunakanBigInteger
Collection
, menangani null
, ...) gunakan Integer
/ Long
sebagai gantinyaAn int
adalah integer 32-bit; a long
adalah bilangan bulat 64-bit. Yang mana yang akan digunakan tergantung pada seberapa besar angkanya yang ingin Anda kerjakan.
int
dan long
merupakan tipe primitif, sedangkan Integer
dan Long
merupakan objek. Tipe primitif lebih efisien, tetapi terkadang Anda perlu menggunakan objek; misalnya, kelas koleksi Java hanya dapat bekerja dengan objek, jadi jika Anda memerlukan daftar bilangan bulat, Anda harus membuatnya List<Integer>
, misalnya (Anda tidak dapat menggunakannya int
secara List
langsung).
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
Jika penggunaan Anda atas variabel termasuk dalam kisaran 32 bit, gunakan Int
, else use long
. Biasanya panjang digunakan untuk perhitungan ilmiah dan hal-hal seperti itu membutuhkan banyak ketelitian. (misalnya nilai pi).
Contoh memilih salah satu dari yang lain adalah kasus YouTube. Mereka pertama-tama mendefinisikan penghitung penayangan video sebagai penghitung
int
yang meluap ketika lebih dari 2.147.483.647 penayangan diterima sebagai video populer. KarenaInt
penghitung tidak dapat menyimpan nilai lebih dari kisarannya, YouTube mengubah penghitung ke variabel 64 bit dan sekarang dapat menghitung hingga 9.223.372.036.854.775.807 tampilan. Pahami data Anda dan pilih jenis yang cocok karena variabel 64 bit akan membutuhkan memori dua kali lipat daripada variabel 32 bit.
Ketika menggunakan angka yang sangat panjang yang mungkin melebihi 32 bit untuk diwakili, Anda dapat menggunakan panjang untuk memastikan bahwa Anda tidak akan memiliki perilaku aneh.
Dari Java 5 Anda dapat menggunakan fitur in-boxing dan out-boxing untuk menggunakan int dan Integer sepenuhnya sama. Artinya, Anda dapat melakukan:
int myInt = new Integer(11);
Integer myInt2 = myInt;
Masuk dan keluar tinju memungkinkan Anda untuk beralih antara int dan Integer tanpa konversi tambahan (sama untuk Long
, Double
, Short
juga)
Anda boleh menggunakan int
sepanjang waktu, tetapi Integer
berisi beberapa metode pembantu yang dapat membantu Anda melakukan beberapa operasi kompleks dengan bilangan bulat (seperti Integer.parseInt(String)
)
a) Kelas objek "Panjang" versus tipe primitif "panjang". (Setidaknya di Jawa)
b) Ada ukuran memori yang berbeda (bahkan tidak jelas) dari tipe primitif:
Java - semuanya jelas: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. hanya mengacaukan: https://en.wikipedia.org/wiki/C_data_types