1. Daftar jenis pembungkus

Anda tahu bahwa Java memiliki 8 tipe primitif, yang merupakan tipe yang bukan kelas. Di satu sisi, ini bagus — sederhana dan hanya memakan sedikit ruang. Di sisi lain, terkadang kelas adalah yang kita butuhkan. Anda akan tahu persis mengapa itu ada di pelajaran berikutnya.

Jadi apa yang bisa dilakukan?

Dimulai dengan versi kelima Java, setiap tipe primitif mendapatkan kelas kembar. Setiap kelas tersebut menyimpan satu bidang dengan nilai dari tipe tertentu. Kelas-kelas ini disebut tipe pembungkus , karena mereka membungkus nilai-nilai primitif di dalam kelas.

Berikut adalah daftar jenis-jenis tersebut. Apakah Anda tahu?

Tipe primitif kelas pembungkus
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

Nama-nama tipe primitif dimulai dengan huruf kecil, tetapi nama kelas pembungkus dimulai dengan huruf besar. Beberapa nama kelas juga sedikit lebih panjang: Integerinstead of intи Characterinstead of char.

Semua objek dari kelas pembungkus tidak dapat diubah ( tidak dapat diubah ).

Kode yang disederhanakan untuk Integerkelas terlihat seperti ini:

Kode Catatan
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}




Pembuat Variabel




Metode mengembalikan nilai




Metode statis membuat Integerobjek baru untuk intvariabel

2. Mengubah an intmenjadi anInteger

Jenis pembungkus dianggap rekanan dari saudara primitifnya: Anda dapat dengan mudah membuat objek pembungkus yang sesuai dengan jenis primitif.

Mari gunakan tipe int sebagai contoh untuk menganalisis bagaimana tipe primitif berinteraksi dengan tipe pembungkusnya yang sesuai. Kode untuk mengonversi dari an intke an Integerdan sebaliknya akan terlihat seperti ini:

Untuk mengonversi an intmenjadi an Integer, Anda perlu menulis kode ini:

Integer name = new Integer(value);

Di mana namenama variabel Integer, dan nilai valueyang dibungkus int.

Contoh:

Kode Catatan
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

Dan untuk mengonversi an Integermenjadi an int, Anda perlu menulis kode ini:

int name = variable.intValue();

Di mana namenama variabel int, dan variablemerupakan referensi ke suatu Integerobjek.

Contoh:

Kode Catatan
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

3. Autoboxing dan unboxing

Tetapi bahkan operasi sederhana dengan Integertipe tersebut tidak mudah untuk ditulis.

Seperti yang kami katakan sebelumnya, Integertipenya tidak dapat diubah ( tidak dapat diubah ). Untuk membuat Integerobjek dengan nilai baru int, Anda perlu membuat Integerobjek baru secara eksplisit. Yang mengatakan, mudah untuk mendapatkan nilai yang intdisimpan di dalam Integerobjek — panggil saja intValue()metodenya.

Contoh:

Kode Keterangan
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
Bungkus 5objek Dapatkan nilai dari objek Buat objek baru (sama Integerdengan 10)
Integer
Integer

Ini kode yang agak rumit, bukan begitu?

Pencipta Java berpikir demikian, jadi mereka mengajari kompiler bagaimana melakukan operasi ini secara otomatis. Konversi otomatis an intke an Integerdisebut autoboxing (secara otomatis memasukkan nilai ke dalam kotak), dan operasi sebaliknya (mengubah an Integermenjadi an int) disebut unboxing .

Kode Anda Apa yang dilihat oleh kompiler
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

Berkat autoboxing dan unboxing, Anda dapat menetapkan variabel dengan aman intdan Integersebaliknya. Anda dapat menulis ekspresi dengan kompleksitas apa pun tanpa membuat perbedaan antara tipe intdan Integer.

Contoh:

Kode Apa yang akan dihasilkan oleh kompiler
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


4. Membandingkan variabel pembungkus

Autoboxing dan unboxing adalah proses yang sederhana dan transparan. Kami menggunakan new Integer()pernyataan sesuai kebutuhan, dan kami memanggil intValue()metode sesuai kebutuhan.

Semuanya bekerja dengan baik dan mudah untuk Anda, sang programmer. Ingatlah bahwa jika Anda membandingkan an Integerdan an Integer, maka perbandingannya didasarkan pada referensi dan bukan nilai.

Kode Keluaran konsol
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

Variabel adan btidak menyimpan intnilai. Mereka menyimpan referensi ke objek. Artinya, penting untuk mengingat cara membandingkannya dengan benar:

Salah Benar
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}