Apa perbedaan antara Integer dan int di Jawa?


248

Misalnya mengapa Anda bisa melakukan:

int n = 9;

Tapi tidak:

Integer n = 9;

Dan Anda dapat melakukannya:

Integer.parseInt("1");

Tapi tidak:

int.parseInt("1");

35
integer adalah kelas, int adalah tipe primitif
Anycorn

24
Anda dapat melakukannya Integer n = 9;karena melakukan autoboxing (kecuali jika Anda menggunakan versi java yang sangat lama)
Alderath

Jawaban:


320

intadalah tipe primitif. Variabel tipe intmenyimpan nilai biner aktual untuk integer yang ingin Anda wakili. int.parseInt("1")tidak masuk akal karena intmerupakan bukan kelas dan karena itu tidak memiliki metode apapun.

Integeradalah kelas, tidak berbeda dari yang lain dalam bahasa Java. Variabel referensi tipe Integertoko untuk objek, seperti halnya dengan jenis referensi (objek) lainnya. adalah panggilan ke metode statis dari kelas (perhatikan bahwa metode ini benar-benar mengembalikan dan bukan ).IntegerInteger.parseInt("1")parseIntIntegerintInteger

Untuk lebih spesifik, Integeradalah kelas dengan bidang tipe tunggal int. Kelas ini digunakan di mana Anda perlu intdiperlakukan seperti objek lain, seperti dalam tipe atau situasi umum di mana Anda memerlukan nullability.

Perhatikan bahwa setiap tipe primitif di Jawa memiliki kelas pembungkus yang setara :

  • byte telah Byte
  • short telah Short
  • int telah Integer
  • long telah Long
  • boolean telah Boolean
  • char telah Character
  • float telah Float
  • double telah Double

Kelas wrapper mewarisi dari kelas Object, dan primitif tidak. Jadi itu dapat digunakan dalam koleksi dengan referensi Objek atau dengan Generik.

Sejak java 5 kita memiliki autoboxing, dan konversi antara kelas primitif dan wrapper dilakukan secara otomatis. Waspadalah, bagaimanapun, karena ini dapat menyebabkan bug dan masalah kinerja yang halus; menjadi eksplisit tentang konversi tidak pernah sakit.


6
Dalam C#semua tipe data memiliki "alias" dan int.Parse()memang masuk akal (meskipun sebenarnya tidak)
Vahid Amiri

22
@ VSG24 ... tapi ini pertanyaan Java, dan ini jawaban Java. C#sama sekali tidak relevan di sini.
Darkhogg

3
Contoh yang bagus adalah: Kesalahan kompilasi: Daftar <int> Valid: Daftar <Integer>
hagai

Pengetahuan tambahan selalu bermanfaat
sumit sharma

1
Saya suka belajar hal-hal baru, terutama ketika pengetahuan terkait dengan topik saat ini. Terima kasih Vahid.
Paul Oliver

30

Integer adalah kelas dan int adalah tipe primitif.

Baca di tautan ini:


1
Saya ingin menunjukkan, saya pikir ini adalah jawaban yang sempurna karena dua alasan: 1- Ringkas dan akurat, menjaga audiens / penanya dalam pikiran 2- Memberikan arahan untuk detail tambahan daripada menempatkan semuanya dalam teks jawaban Tidak semua pertanyaan dapat dijawab dengan akurat dan ringkas (beberapa membutuhkan lebih banyak detail dan nuansa agar akurat dan lengkap), tetapi saya pikir semua jawaban harus berusaha sesederhana dan langsung ini.
DRich

11
Heh, saya pikir itu justru sebaliknya. "int adalah tipe primitif" tidak memberi tahu Anda apa pun, jika Anda tidak tahu apa tipe primitif itu. (Dan jika Anda melakukannya, Anda sudah sangat mungkin tahu perbedaan antara int dan Integer). Dan mengirimkan pembaca ke dua tautan yang berlabel "Tautan 1" dan "Tautan 2" cukup tidak membantu, terutama dibandingkan dengan hanya mengutip bagian yang relevan.
Steve Bennett

7

Integer cukup banyak hanya pembungkus untuk tipe int primitif. Ini memungkinkan Anda untuk menggunakan semua fungsi kelas Integer untuk membuat hidup sedikit lebih mudah bagi Anda.

Jika Anda baru mengenal Java, sesuatu yang harus Anda pelajari adalah dokumentasi Java. Misalnya, apa pun yang ingin Anda ketahui tentang Kelas Integer didokumentasikan secara rinci.

Ini langsung dari dokumentasi untuk kelas Integer:

Kelas Integer membungkus nilai int tipe primitif dalam suatu objek. Objek bertipe Integer berisi bidang tunggal yang tipenya int.


7
Ini agak melenceng. Misalnya, seperti Integerkelas, ia dapat disimpan dalam wadah (tidak seperti jenis primitif).
Oliver Charlesworth

6

Variabel int menyimpan nilai integer bertanda 32 bit. Integer (dengan huruf kapital I) menyimpan referensi ke objek tipe integer (kelas), atau null.

Java secara otomatis melakukan cast di antara keduanya; dari Integer ke int setiap kali objek Integer muncul sebagai argumen ke operator int atau ditugaskan ke variabel int, atau nilai int ditugaskan ke variabel Integer. Casting ini disebut tinju / unboxing.

Jika variabel bilangan bulat referensi Integer unboxed, secara eksplisit atau implisit, NullPointerException dilemparkan.

(Dalam teks di atas, istilah "variabel" berarti variabel lokal, bidang atau parameter)


5

Integermengacu pada jenis pembungkus di Jawa sedangkan intjenis primitif. Semuanya kecuali tipe data primitif di Jawa diimplementasikan sama seperti objek yang menyiratkan Java adalah bahasa pemrograman berorientasi objek murni yang sangat berkualitas. Jika Anda perlu, semua tipe primitif juga tersedia sebagai tipe wrapper di Jawa. Anda dapat memiliki beberapa manfaat kinerja dengan tipe primitif, dan karenanya tipe wrapper hanya boleh digunakan jika diperlukan.

Dalam contoh Anda seperti di bawah ini.

Integer n = 9;

konstanta 9sedang kotak otomatis ( auto-boxingdan unboxingterjadi secara otomatis dari java 5seterusnya) ke Integerdan karena itu Anda dapat menggunakan pernyataan seperti itu dan juga Integer n = new Integer(9). Ini sebenarnya dicapai melalui pernyataanInteger.valueOf(9).intValue();


3

int adalah tipe primitif dan bukan objek. Itu berarti tidak ada metode yang terkait dengannya. Integer adalah objek dengan metode (seperti parseInt).

Dengan java yang lebih baru ada fungsi untuk tinju otomatis (dan unboxing). Itu berarti bahwa kompiler akan memasukkan Integer.valueOf (int) atau integer.intValue () di mana diperlukan. Itu artinya sebenarnya mungkin untuk menulis

Integer n = 9;

yang diartikan sebagai

Integer n = Integer.valueOf(9);

3

Integer adalah kelas pembungkus / Objek dan int adalah tipe primitif. Perbedaan ini memainkan peran besar ketika Anda ingin menyimpan nilai int dalam koleksi, karena mereka hanya menerima objek sebagai nilai (hingga jdk1.4). JDK5 dan seterusnya karena autoboxing itu cerita yang berbeda.


5
JDK5 + juga hanya menerima objek; hanya saja dengan autoboxing, kompiler secara otomatis memanggil Integer.valueOf(i)atau Integer.intValue()untuk Anda. Collection<int>masih tidak akan bekerja. Jadi ini bukan cerita yang sama sekali berbeda - ini adalah kisah yang sama, hanya dengan sedikit tulisan singkat.
yshavit

sepakat. Maaf, kata-kata saya mungkin tidak mencerminkan itu.
kosa

3

Di Java int adalah tipe data primitif sementara Integer adalah kelas Helper, digunakan untuk mengonversi satu tipe data ke yang lain.

Sebagai contoh:

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

Tipe data primitif menyimpan memori tercepat yang tersedia di mana kelas Helper kompleks dan menyimpan dalam memori tumpukan.

referensi dari Pelatihan Penting Jawa "David Gassner".


2

intadalah tipe primitif yang mewakili integer. sedangkan Integeradalah Obyek yang membungkus int. The Integerobjek memberi Anda lebih banyak fungsi, seperti mengkonversi ke hex, string, dll

Anda juga dapat menggunakan konsep OOP dengan Integer. Misalnya, Anda dapat menggunakan Integer untuk obat generik (yaitu ).Collection<Integer>


2

Ini diambil dari Jawa: Referensi Lengkap, Edisi Kesembilan

Java menggunakan tipe primitif (juga disebut tipe sederhana), seperti int atau double , untuk menampung tipe data dasar yang didukung oleh bahasa. Tipe primitif , bukan objek, digunakan untuk kuantitas ini demi kinerja . Menggunakan objek untuk nilai-nilai ini akan menambah overhead yang tidak dapat diterima bahkan untuk perhitungan paling sederhana. Dengan demikian, tipe primitif bukan bagian dari hierarki objek , dan mereka tidak mewarisi Objek .

Terlepas dari manfaat kinerja yang ditawarkan oleh tipe primitif, ada kalanya Anda membutuhkan representasi objek. Misalnya, Anda tidak bisa melewatkan tipe primitif dengan merujuk ke metode . Juga, banyak dari struktur data standar yang diimplementasikan oleh Java beroperasi pada objek, yang berarti bahwa Anda tidak dapat menggunakan struktur data ini (khusus objek) untuk menyimpan tipe primitif . Untuk menangani situasi ini (dan lainnya), Java menyediakan pembungkus tipe, yang merupakan kelas yang merangkum tipe primitif dalam suatu objek.

Kelas wrapper berhubungan langsung dengan fitur autoboxing Java . Jenis pembungkusnya adalah Double, Float, Long, Integer, Short, Byte, Character, dan Boolean . Kelas-kelas ini menawarkan beragam metode yang memungkinkan Anda untuk mengintegrasikan sepenuhnya tipe primitif ke dalam hierarki objek Java.


1

Untuk mengoptimalkan runtime kode Java, int tipe primitif telah ditambahkan termasuk float, booldll. Tetapi mereka datang bersama dengan kelas pembungkus sehingga jika diperlukan Anda dapat mengonversi dan menggunakannya sebagai objek Java standar bersama dengan banyak utilitas yang datang sebagai anggota mereka fungsi (seperti Integer.parseInt("1")).


1

intadalah tipe data primitif sementara Integeradalah Tipe Referensi atau Pembungkus (Kelas) di Jawa.

setelah java 1.5itu memperkenalkan konsep autoboxing dan unboxing Anda dapat menginisialisasi keduanya intatau Integerseperti ini.

int a= 9
Integer a = 9 // both valid After Java 1.5.

kenapa Integer.parseInt("1");tapi tidak int.parseInt("1");??

Integeradalah Kelas yang didefinisikan dalam jdkperpustakaan dan parseInt()merupakan metode statis milik IntegerKelas

Jadi, Integer.parseInt("1");mungkin saja di java. tetapi inttipe primitif (anggap seperti kata kunci) di java. Jadi, Anda tidak dapat memanggil parseInt()dengan int.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.