Memahami Wrapper Class, Autoboxing dan Inboxing Pada Java

Apa itu wrapper class?


Wrapper class pada Java ini menyediakan mekanisme untuk mengkonversi tipe data primitif menjadi objek dan objek menjadi tipe primitif.

Seperti kita ketahui sebelumnya, nilai primitif bukanlah objek, namun nilai ini bisa dibungkus (wrap) dengan menggunakan class-class wrapper di Java API (Application Programming Interface). Java memiliki dukungan API yang kaya, sehingga menjadi salah satu alasan mengapa Java menjadi bahasa pemrograman yang harus dipelajari.

wrapper_class_autoboxing_inboxing


Karena Java adalah pemrograman yang berorientasi objek, maka kinerjanya akan terpengaruh bila nilai dari tipe data primitif ini diperlakukan sebagai objek. Namun, terlepas dari itu semua, banyak method pada Java yang memerlukan penggunaan objek-objek sebagai argumen (pass by value).

Autoboxing dan Inboxing


Sebelum JDK 1.5, tidak mudah untuk melakukan konversi dari tipe primitif seperti int, char, float, double, byte, long, short, atau boolean menjadi equivalen dengan objeknya dari class Integer, Character, Float, Double, Byte, Long, Short atau Boolean.

Dalam Java, proses konversi dari tipe primitif menjadi objek dikenal dengan autoboxing, dan sebaliknya konversi dari objek ke tipe primitif disebut dengan inboxing. Fitur ini mulai berjalan secara otomatis sejak J2SE 5.0.

Class-class wrapper ini berada dalam  java.lang package yang berjumlah 8 class, yaitu :

TIPE PRIMITIF CLASS WRAPPER
boolean       Boolean
byte          Byte
char          Character
float         Float
int           Integer
long          Long
short         Short
double        Double

Beberapa method dari class-class tersebut yang digunakan untuk proses autoboxing dan inboxing adalah doubleValue(), floatValue(), intValue(), longValue(), shortValue() dan byteValue().

Namun autoboxing dan inboxing ini hadir dengan peringatan tertentu yang perlu dipahami sebelum menggunakannya pada saat melakukan coding,  yang menjadi lebih penting lagi, karena ini terjadi secara otomatis sehingga berpeluang membuat bug halus jika anda tidak dapat mengetahui kapan autoboxing atau inboxing terjadi.

Sebelum Java 1.5, sering terdapat topik penting mengenai jika anda menggunakan Collections seperti Hashmap ataupun ArrayList, maka anda tidak bisa menyimpan secara langsung tipe data primitif ke dalam Collections tersebut, melainkan anda harus mengonversi tipe data primitif tersebut menjadi Objek baru kemudian anda bisa menyimpannya kedalam Collections.

Dengan diperkenalkannya autoboxing dan inboxing ini, maka compiler Java secara otomatis melakukan konversi tipe primitif menjadi objek sehingga lebih memudahkan dalam pembacaan kode.

Kapan Autoboxing dan Inboxing Digunakan?

Autoboxing diaplikasikan oleh compiler pada kondisi berikut:
  • Ketika melakukan pemanggilan method dimana objek sebagai argumen diharapkan, jika nilai primitif di-pass-kan maka Java secara otomatis akan mengkonversi nilai primitif tersebut menjadi nilai Objek yang sama.
  • Ketika nilai primitif ditetapkan pada variabel dari wrapper class terkait.




Contoh autoboxing saat nilai primitif ditetapkan pada variabel dari wrapper class


Berikut ini contoh konversi dari tipe primitif menjadi Integer sebelum JDK 1.5:



Setelah fitur autoboxing diperkenalkan:


Contoh autoboxing saat melakukan pemanggilan method

Pada contoh ini dapat dilihat bagaimana autoboxing memberikan kita kemudahan untuk konversi dari primitif menjadi Objek atau bahkan sebaliknya (inboxing) tanpa harus menuliskan kode untuk proses tersebut secara eksplisit.


Ketika method tampilkan(Integer) yang menerima objek Integer dengan primitif int tersebut dipanggil, maka autoboxing pertama-tama akan mengkonversi tipe primitif menjadi objek, baru kemudian akan memanggil method tampilkan().

Kemudian pada line 14, inboxing terjadi karena method tampilkan() mengembalikan / return Integer selanjutnya nilai yang dikembalikan/return itu disimpan atau ditetapkan ke dalam variabel z dengan tipe primitif int.

Bila Tidak Digunakan Dengan Tepat Autoboxing Bisa Menghasilkan Objek Yang Tidak Diperlukan

Autoboxing bisa menjadi fitur yang 'berbahaya' karena bisa menghasilkan objek, bila auto boxing tersebut terdapat dalam loop. Berikut ini adalah contoh loop di mana autoboxing bisa memperlambat jalannya aplikasi:

Pada line 9 , x += i adalah sama dengan x = x + i, dikarenakan operator '+' tidak dapat  diterapkan oleh objek Integer, maka akan memicu unboxing dari x objek Integer. Kemudian autoboxing dari hasil yang akan disimpan pada x adalah merupakan Integer sebagai berikut:

jumlah = jumlah.intValue() + i;
Integer jumlah = new Integer(hasil);

Dikarenakan jumlah adalah Integer, maka akan menghasilkan sekitar 5000 Integer objek yang tidak diperlukan, dan jika ini terjadi pada skala yang lebih besar, maka berpotensi untuk melambatkan sistem aplikasi.

Memahami Wrapper Class, Autoboxing dan Inboxing Pada Java Memahami Wrapper Class, Autoboxing dan Inboxing Pada Java Reviewed by Bahasa Java on 05.55.00 Rating: 5

Tidak ada komentar:

Diberdayakan oleh Blogger.