Kelas Wrapper di Java

1. Ikhtisar

Seperti namanya, kelas pembungkus adalah objek yang merangkum tipe Java primitif.

Setiap primitif Java memiliki pembungkus yang sesuai:

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

Ini semua ditentukan dalam paket java.lang , oleh karena itu kita tidak perlu mengimpornya secara manual.

2. Kelas Pembungkus

“Apa tujuan dari kelas pembungkus?”. Itu salah satu pertanyaan wawancara Java yang paling umum.

Pada dasarnya, kelas generik hanya bekerja dengan objek dan tidak mendukung primitif . Akibatnya, jika kita ingin bekerja dengannya, kita harus mengubah nilai primitif menjadi objek pembungkus.

Misalnya, Java Collection Framework bekerja dengan objek secara eksklusif. Jauh di masa lalu ketika (sebelum Java 5, hampir 15 tahun yang lalu) tidak ada autoboxing dan kami, misalnya, tidak bisa begitu saja memanggil add (5) pada kumpulan Integer.

Pada saat itu, nilai primitif tersebut perlu dikonversi secara manual ke kelas pembungkus yang sesuai dan disimpan dalam koleksi.

Hari ini, dengan autoboxing, kita dapat dengan mudah melakukan ArrayList.add (101) tetapi secara internal Java mengkonversi nilai primitif ke Integer sebelum menyimpannya dalam ArrayList menggunakan valueOf () metode .

3. Konversi Primitif ke Kelas Wrapper

Sekarang pertanyaan besarnya adalah: bagaimana kita mengubah nilai primitif ke kelas pembungkus yang sesuai misalnya int ke Integer atau karakter ke Karakter?

Nah, kita bisa menggunakan konstruktor atau metode pabrik statis untuk mengonversi nilai primitif menjadi objek kelas pembungkus.

Pada Java 9, bagaimanapun, konstruktor untuk banyak primitif berkotak seperti Integer atau Long sudah tidak digunakan lagi.

Jadi sangat disarankan untuk hanya menggunakan metode pabrik pada kode baru .

Mari kita lihat contoh mengonversi nilai int menjadi objek Integer di Java:

Integer object = new Integer(1); Integer anotherObject = Integer.valueOf(1);

Metode valueOf () mengembalikan sebuah instance yang mewakili nilai int yang ditentukan .

Ini mengembalikan nilai yang di-cache yang membuatnya efisien. Itu selalu menyimpan nilai-nilai antara -128 hingga 127 tetapi juga dapat menyimpan nilai-nilai lain di luar kisaran ini.

Demikian pula, kita juga dapat mengonversi boolean ke Boolean, byte ke Byte, char ke Character, long ke Long, float ke Float, dan double ke Double. Meskipun jika kita harus mengubah String menjadi Integer maka kita perlu menggunakan metode parseInt () karena String bukanlah kelas pembungkus.

Di sisi lain, untuk mengonversi dari objek pembungkus ke nilai primitif, kita dapat menggunakan metode yang sesuai seperti intValue (), doubleValue () dll:

int val = object.intValue(); 

Referensi lengkap dapat ditemukan di sini.

4. Autoboxing dan Unboxing

Di bagian sebelumnya, kami menunjukkan cara mengonversi nilai primitif menjadi objek secara manual.

Setelah Java 5, konversi ini dapat dilakukan secara otomatis dengan menggunakan fitur yang disebut autoboxing dan unboxing.

"Boxing" mengacu pada pengubahan nilai primitif menjadi objek pembungkus yang sesuai. Karena ini bisa terjadi secara otomatis, ini disebut autoboxing.

Demikian pula, saat objek pembungkus dibuka bungkusnya menjadi nilai primitif, ini dikenal sebagai unboxing.

Artinya dalam praktiknya adalah kita bisa meneruskan nilai primitif ke metode yang mengharapkan objek pembungkusatau menetapkan primitif ke variabel yang mengharapkan objek:

List list = new ArrayList(); list.add(1); // autoboxing Integer val = 2; // autoboxing

Dalam contoh ini, Java akan secara otomatis mengonversi nilai int primitif menjadi pembungkus.

Secara internal, ini menggunakan metode valueOf () untuk memfasilitasi konversi. Misalnya, baris berikut ini setara:

Integer value = 3; Integer value = Integer.valueOf(3);

Meskipun hal ini membuat konversi menjadi mudah dan kode lebih mudah dibaca, ada beberapa kasus di mana kita tidak boleh menggunakan autoboxing misalnya di dalam loop .

Mirip dengan autoboxing, unboxing dilakukan secara otomatis saat meneruskan objek ke metode yang mengharapkan primitif atau saat menetapkannya ke variabel primitif:

Integer object = new Integer(1); int val1 = getSquareValue(object); //unboxing int val2 = object; //unboxing public static int getSquareValue(int i) { return i*i; }

Pada dasarnya, jika kita menulis metode yang menerima nilai primitif atau objek pembungkus, kita masih bisa meneruskan keduanya. Java akan berhati-hati dalam meneruskan jenis yang tepat misalnya primitif atau pembungkus tergantung pada konteksnya.

5. Kesimpulan

Dalam tutorial singkat ini, kita berbicara tentang kelas pembungkus di Java, serta mekanisme autoboxing dan unboxing.