Wrapper class adalah tipe data bawaan java yang berupa object, setiap tipe data primitif mempunyai padanan di wrapper class ini. Walaupun wrapper ini berupa class, variabel yang memegang objectnya bukanlah variabel reference. Artinya kalau ada dua buah variabel yang memegang nilai sama, satu variabel nilainya diganti maka variabel yang lain tidak akan ikut berubah nilainya. Sifat ini disebut dengan immutable.
Primitif Wrapper class
byte Integer short Short int Integer long Long loat Float double Double boolean Boolean
char Character String
Sebelum java 5, selain String, semua class wrapper tidak bisa langsung diberi nilai literal. Perlu proses konversi dari nilai primitif ke wrapper classnya dan sebaliknya. Berikut ini contoh bagaimana memberi nilai ke dalam variabel dengan tipe data wrapper class sebelum java 5.
Integer x = new Integer(10); int i = x.intValue();
long l = 100l;
Long y = Long.valueOf(l);
int i = Integer.parseInteger("100");
Konversi dari satu tipe data wrapper class ke tipe data wrapper class yang lain tidak bisa menggunakan mekanisme casting seperti di dalam tipe data primitif. Hal ini dikarenakan pada dasarnya wrapper class adalah class, sedangkan casting dalam class hanya bisa dilakukan kalau ada hubungan inheritance antara kedua class yang sedang akan dicasting. Kalau proses casting antara dua class dilakukan secara ceroboh akan menyebabkan ClassCastException pada waktu kode dijalankan.
Array
Array adalah object di java yang dapat menyimpan kumpulan data dengan tipe yang sama. Array dapat menyimpan data dengan tipe primitif, wrapper class maupun reference. Walaupun array bisa menyimpan tipe data primitif, tetapi array selalu berada di heap, atau bisa dibilang apapun tipe arraynya, array itu sendiri adalah object.
Untuk bisa bekerja dengan array, kita perlu melakukan tiga langkah :
• Mendeklarasikan variabel array
• Menginisialisasi object array
• Mengisi array dengan data
Ada beberapa cara berbeda untuk melakukan ketiga hal tersebut, kita akan membahas satu per satu.
Array dideklarasikan dengan mendefnisikan tipe datanya diikuti dengan tanda kurung kotak buka dan tutup kemudian diikuti nama variabelnya. Contohnya sebagai berikut :
int[] data;
Cara deklarasi array di atas adalah cara yang dianjurkan. Semua variabel yang diletakkan setelah int[] akan bertipe array, misalnya kita modifkasi sedikit deklarasi di atas agar variabel yang dideklarasikan lebih dari satu, seperti di bawah ini :
int[] data, key, values;
Cara kedua mendeklarasikan array adalah dengan menulis tipe data kemudian diikuti oleh nama variabel serta kurung kotak buka dan tutup setelah nama variabel. Contohnya sebagai berikut :
int data[];
Cara ini tidak direkomendasikan, karena kalau ingin mendeklarasikan lebih dari satu variabel array, maka kurung kotak buka tutup harus ditulis di setiap variabel. Jika kurung kotak buka tutup tidak ditulis, maka variabel tersebut bertipe int, bukan array. Contohnya adalah :
int data[], key[], values;
variabel data dan key bertipe array int sedangkan variabel values bertipe int, bukan array.
Jumlah kurung kotak menentukan dimensi array, misalnya kita ingin membuat array dua dimensi (di dalam array ada array) dan tiga dimensi (di dalam array ada array dari array). Contohnya :
String[][] arrayDuaDimensi; String[][][] arrayTigaDimensi;
Setelah berhasil mendeklarasikan array, sekarang waktunya menginisialisasi object array. Caranya sangat sederhana, menggunakan keyword new dan mendefnisikan panjang arraynya,
contohnya seperti berikut ini : int[] data;
data = new data[10];
Kode di atas artinya : buat variabel data dengan tipe array int, inisialisasi arraynya dengan panjang 10 dan isi dengan nilai 0; Kenapa diisi dengan nilai 0? hal ini dikarenakan tipe data primitif tidak bisa bernilai null, harus ada nilai defaultnya. Dalam hal ini tipe data int akan selalu mempunyai nilai default 0.
Kalau tipe data arraynya adalah wrapper class atau object, array akan berisi null, seperti contoh di bawah ini :
String[] data;
data = new String[10];
Ukuran dari array bersifat wajib, kalau kita menginisialisasi array tanpa disertai ukuran panjang array, maka kodenya akan gagal dicompile. Contohnya seperti di bawah ini :
String[] data = new String[];
Inisalisasi array multidimensi sedikit berbeda dengan array satu dimensi. Kita bisa mendeklarasikan array dua dimensi sekaligus dengan isinya, misalnya contoh di bawah ini akan membuat matriks 10x10 sehingga bisa menampung 100 data.
String[] arrayDuaDimensi = new String[10][10];
Ketika menginisialisasi array multidimensi, ukuran array hanya wajib diisi di dimensi pertama, sedangkan dimensi kedua tidak wajib disebutkan ukuranya. Hal ini mengakibatkan isi dari array yang berupa array masih bernilai null dan harus diinisalisasi dahulu sebelum diisi dengan nilai.
String[] arrayDuaDimensi = new String[10][];
Memasukkan data ke dalam array dilakukan dengan menyebutkan index dimana data akan diletakkan. Seperti contoh di bawah ini :
int data = new int[4]; data[0] = 1;
data[1] = 12; data[3] = 19;
Perhatikan bahwa index dari array dimulai dari 0 dan selalu bernilai positif. Kalau index yang dimasukkan diluar jangkauan yang benar, akan muncul ArrayIndexOfBoundException. Mari kita simulasikan bagaimana error ArrayIndexOfBoundException terjadi :
public class ArrayError {
public static void main(String[] args) { int[] data = new int[4];
data[1] = 10; data[3] = 8; data[4] = 9; }
}
Simpan dalam fle ArrayError.java, kompilasi fle java tersebut kemudian jalankan programnya: $ javac ArrayError.java
$ java ArrayError
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at ArrayError.main(ArrayError.java:6)
$
Terlihat bahwa array mempunyai panjang 4, index terbesar adalah 3 karena index array dimulai dari 0, kemudian kode data[4] berusaha mengakses index 4 yang berada di luar jangkauan.
Sekarang kita lihat bagaimana cara memasukkan data ke dalam array multidimensi. Seperti yang sudah kita bahas sebelumnya, cara menginisialisasi array multidimensi ada dua, yang pertama adalah mengisi ukuran semua dimensi array, dan yang kedua adalah mengisi dimensi
pertama saja. Kalau cara pertama yang kita pilih untuk menginisialisasi array, maka data bisa langsung dimasukkan ke dalam array seperti contoh di bawah ini :
int[][] data = new int[3][3]; data[0][0] = 1;
data[0][1] = 1; data[0][2] = 1; data[1][0] = 1;
Kalau cara kedua yang dipilih, maka kita harus menginisialisasi array untuk dimasukkan ke dalam array dimensi pertama, bingung? Hmm mari kita lihat contoh saja agar lebih mudah.
Int[][] data = new int[3][];
data[0] = new int[5]; //init array yang dimasukkan ke array dimensi pertama data[0][0] = 10;
data[0][2] = 10; data[0][3] = 10;
data[1] = new int[2]; //init array yang dimasukkan ke array dimensi pertama data[1][0] = 100;
data[1][1] = 200;
Nah bisa kita lihat bahwa sebelum mengisi nilai ke dalam array dimensi yang kedua, maka array dimensi pertamanya harus diisi dengan array. Dengan cara ini, maka ukuran dimensi array menjadi tidak seragam.
Dari materi array yang sudah kita bahas di atas, sepertinya bekerja dengan array cukup repot dan tidak praktis, terlalu banyak yang harus ditulis. Menyadari hal ini, Java menyediakan cara cepat untuk mendeklarasikan, menginisialisasi dan mengisi nilai array hanya dalam satu baris, baik untuk aray satu dimensi maupun array dua dimensi. Berikut ini contoh sintaksnya :
int[] data = {1,2,3,4,6};
int[] duaDimensi = {{1,2,3},{2,3},{3}};
String[][] arrayDuaDimensi = {{"satu","dua","tiga"},{"empat","lima"}};
Cara di atas sangat rapi dan mempersingkat banyak kode, tetapi ada satu kelemahan cara di atas, bisa dilihat bahwa tidak ada tipe data yang eksplisit untuk operand di sebelah kanan. Kelemahan di atas di atasi dengan adanya feature “anonymous array” dengan menyertakan tipe data dari array ketika diinisialisasi. Contohnya :
int[] data = new int[]{1,2,3,4,6};
int[] duaDimensi = new int[][]{{1,2,3},{2,3},{3}};
String[][] arrayDuaDimensi = new String[][]{{"satu","dua","tiga"}, {"empat","lima"}};
Walaupun ada keyword new, tidak perlu didefnisikan berapa panjang dari arraynya, karena panjang dari array ditentukan dari nilai yang diletakkan di dalam kurung kurawal.
Tipe data array sangat penting ketika array akan digunakan sebagai perameter sebuah fungsi, mari kita lihat kode di bawah ini :
public class AnonymousArray{
public static void printArray(String[] data){ System.out.println(data);
}
public static void main(String[] args){
printArray(new String[]{"satu","dua","tiga"}); }
}
Karena pada dasarnya array adalah object, maka array juga mempunyai method dan property. Salah satu yang paling berguna adalah length. Properti ini digunakan untuk mengetahui berapa panjang dari array tersebut. Contohnya sebagai berikut :
int[] data = new int[Integer.MAX_VALUE];
System.out.println("panjang data : " + data.length);
melakukan sorting, melakukan pencarian binary bahkan hingga mengeprint isi array agar bagus tampilanya. Class tersebut adalah java.util.Arrays. Silahkan lihat Java Documentation bagaimana cara menggunakan perkakas yang ada dalam class java.util.Arrays ini.