Kadang-kadang saya melihat penggunaan API longatau Longatau intatau Integer, dan saya tidak tahu bagaimana keputusan dibuat untuk itu?
Kapan saya harus memilih apa?
Kadang-kadang saya melihat penggunaan API longatau Longatau intatau Integer, dan saya tidak tahu bagaimana keputusan dibuat untuk itu?
Kapan saya harus memilih apa?
Jawaban:
Longadalah Objectbentuk dari long, dan Integermerupakan bentuk objek dari int.
The longmenggunakan 64 bit . The intpenggunaan 32 bit, sehingga hanya bisa menampung angka sampai dengan ± 2 miliar (-2 31 ke +2 31 -1).
Anda harus menggunakan longdan int, kecuali jika Anda perlu menggunakan metode yang diwarisi dari Object, seperti hashcode. Java.util.collectionsmetode biasanya menggunakan versi kotak ( Object-wrapped), karena mereka perlu bekerja untuk apa saja Object, dan tipe primitif, seperti intatau long, bukan Object.
Perbedaan lainnya adalah bahwa longdan intmerupakan nilai-demi-nilai , sedangkan Longdan Integermerupakan nilai referensi yang dilewati , seperti semua tipe Java non-primitif. Jadi jika dimungkinkan untuk mengubah Longatau 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 Longatau Integerbisa jadi null.
Ada beberapa hal yang tidak dapat Anda lakukan dengan tipe primitif:
nullnilaiObjectsKecuali Anda membutuhkan salah satu dari itu, Anda harus memilih tipe primitif, karena mereka membutuhkan lebih sedikit memori.
int, saat menahan angka.intterlalu kecil, gunakan alonglongterlalu kecil, gunakanBigIntegerCollection, menangani null, ...) gunakan Integer/ Longsebagai gantinyaAn intadalah integer 32-bit; a longadalah bilangan bulat 64-bit. Yang mana yang akan digunakan tergantung pada seberapa besar angkanya yang ingin Anda kerjakan.
intdan longmerupakan tipe primitif, sedangkan Integerdan Longmerupakan 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 intsecara Listlangsung).
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
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
intyang meluap ketika lebih dari 2.147.483.647 penayangan diterima sebagai video populer. KarenaIntpenghitung 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, Shortjuga)
Anda boleh menggunakan intsepanjang waktu, tetapi Integerberisi 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