Membuat array lalu mengisinya satu per satu dengan penugasan terpisah memang sah, tetapi membosankan bila datanya sudah diketahui sejak awal. Java menyediakan array initializer — bentuk ringkas dengan kurung kurawal yang mengisi elemen sekaligus pada saat array dibuat. Pada saat yang sama, kita perlu memahami apa isi array yang baru dibuat dengan new sebelum diisi apa pun, karena nilai defaultnya mengikuti tipe elemen. Chapter ini membahas ketiga bentuk pengisian tersebut beserta aturan nilainya.
Array Initializer dengan Kurung Kurawal #
Bentuk paling ringkas menulis daftar nilai di antara { } langsung pada deklarasi: int[] pendek = {1, 2, 3}. Compiler javac menghitung jumlah nilainya, membuat array dengan ukuran tersebut, lalu menyalin nilai satu per satu ke slot yang sesuai. Karena ukurannya disimpulkan dari isi, bentuk ini tidak bisa dipakai untuk mengubah isi array yang sudah ada — hanya sah pada baris deklarasi.
Catatan untuk pengguna var: bentuk initializer justru tidak bisa dipakai bersama type inference. Penulisan var data = {1, 2, 3}; ditolak compiler dengan pesan cannot infer type for local variable data, karena compiler tidak punya konteks tipe untuk mengartikan kurung kurawal tersebut. Inisialisasi dengan var tetap sah memakai bentuk eksplisit: var data = new int[]{1, 2, 3};.
Bentuk kedua, new int[]{4, 5, 6, 7}, memisahkan kata kunci new dari daftar nilai. Ukurannya tetap dihitung compiler, tetapi bentuk ini boleh dipakai di mana saja sebagai ekspresi — termasuk dikirim langsung sebagai argumen method tanpa variabel perantara.
public class InisialisasiArray {
public static void main(String[] args) {
int[] pendek = {1, 2, 3};
int[] lengkap = new int[]{4, 5, 6, 7};
System.out.print("pendek : ");
for (int n : pendek) {
System.out.print(n + " ");
}
System.out.println();
System.out.print("lengkap : ");
for (int n : lengkap) {
System.out.print(n + " ");
}
System.out.println();
System.out.println("Jumlah array anonim: " + jumlah(new int[]{8, 9, 10}));
}
static int jumlah(int[] data) {
int total = 0;
for (int n : data) {
total += n;
}
return total;
}
}Output yang Dihasilkan:
pendek : 1 2 3
lengkap : 4 5 6 7
Jumlah array anonim: 27Mari kita telaah baris-baris kode di atas:
- Baris 3 (
int[] pendek = {1, 2, 3};): bentuk short yang hanya sah pada deklarasi. Compiler membuat array berukuran3lalu mengisi1,2,3berurutan — setara denganpendek[0] = 1; pendek[1] = 2; pendek[2] = 3;namun ditulis satu baris. - Baris 4 (
int[] lengkap = new int[]{4, 5, 6, 7};): bentuk eksplisit dengannew. Ukuran tetap disimpulkan dari jumlah elemen di dalam kurung kurawal, yakni4. - Baris 18 (
jumlah(new int[]{8, 9, 10})): array anonim — dibuat, dikirim, lalu tidak lagi dikaitkan ke nama variabel mana pun. Bentuk{8, 9, 10}tanpanew int[]akan ditolak compiler di posisi ini karena di luar deklarasi. - Baris 22-27 (method
jumlah): menerima parameter bertipeint[], menjumlahkan seluruh elemen, lalu mengembalikan27.
Nilai Default Elemen Array #
Apa isi array yang dibuat dengan new int[5] sebelum kita mengisi apa pun? Jawabannya bergantung pada tipe elemennya. JVM selalu mengisi setiap slot saat array dibuat — slot int diisi 0, slot boolean diisi false, dan slot tipe referensi diisi null. Perilaku ini berbeda dengan variabel lokal biasa yang wajib kita isi sendiri sebelum dibaca; elemen array tidak pernah “belum terisi”.
| Tipe elemen | Nilai default |
|---|---|
byte, short, int, long | 0 |
float, double | 0.0 |
boolean | false |
char | '\u0000' |
tipe referensi (String, class lain) | null |
public class NilaiDefault {
public static void main(String[] args) {
int[] angka = new int[2];
double[] desimal = new double[2];
boolean[] kondisi = new boolean[2];
char[] huruf = new char[2];
String[] nama = new String[2];
System.out.println("int[] : " + angka[0]);
System.out.println("double[] : " + desimal[0]);
System.out.println("boolean[] : " + kondisi[0]);
System.out.println("char[] : " + (int) huruf[0]);
System.out.println("String[] : " + nama[0]);
}
}Output yang Dihasilkan:
int[] : 0
double[] : 0.0
boolean[] : false
char[] : 0
String[] : nullBedahnya ringkas: kelima array pada baris 3-7 dibuat tanpa inisialisasi isi, sehingga setiap slot memuat nilai default tipe masing-masing. Baris 15 mencetak karakter default dengan cast (int) agar terlihat sebagai angka 0 — karakter '\u0000' memang tak terlihat bila dicetak langsung karena merupakan karakter kosong. Baris 16 menunjukkan slot String[] berisi null, bukan string kosong "" — dua hal tersebut berbeda, dan membaca .length() dari null akan melempar NullPointerException.
Dengan tiga bentuk pengisian ini — default value, initializer { }, dan new T[]{...} — kita siap membahas aspek berikutnya: menyalin array dengan aman tanpa secara tak sengaja membagikan referensi yang sama.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
InisialisasiArray.java
Unduh berkaspublic class InisialisasiArray {
public static void main(String[] args) {
int[] pendek = {1, 2, 3};
int[] lengkap = new int[]{4, 5, 6, 7};
System.out.print("pendek : ");
for (int n : pendek) {
System.out.print(n + " ");
}
System.out.println();
System.out.print("lengkap : ");
for (int n : lengkap) {
System.out.print(n + " ");
}
System.out.println();
System.out.println("Jumlah array anonim: " + jumlah(new int[]{8, 9, 10}));
}
static int jumlah(int[] data) {
int total = 0;
for (int n : data) {
total += n;
}
return total;
}
}
NilaiDefault.java
Unduh berkaspublic class NilaiDefault {
public static void main(String[] args) {
int[] angka = new int[2];
double[] desimal = new double[2];
boolean[] kondisi = new boolean[2];
char[] huruf = new char[2];
String[] nama = new String[2];
System.out.println("int[] : " + angka[0]);
System.out.println("double[] : " + desimal[0]);
System.out.println("boolean[] : " + kondisi[0]);
System.out.println("char[] : " + (int) huruf[0]);
System.out.println("String[] : " + nama[0]);
}
}