Program pada dasarnya memproses data: angka, teks, keadaan benar atau salah. Supaya data tersebut dapat dipakai berulang kali, program membutuhkan wadah bernama — dan wadah itulah yang disebut variabel. Java bersifat statically typed, sehingga setiap variabel harus dinyatakan tipenya sejak awal dan compiler javac akan menolak penempatan nilai yang tidak sesuai. Pada Chapter ini kita mulai dari definisi variabel, lalu berlatih mendeklarasikan, mengisi, dan mengubah nilai variabel lewat contoh yang benar-benar berjalan.

Apa itu Variabel #

Variabel adalah pengenal (identifier) yang menunjuk ke satu lokasi memori tempat nilai disimpan selama program berjalan. Tiga sifat melekat pada setiap variabel: nama untuk merujuk lokasi tersebut, tipe yang menentukan jenis dan ukuran data yang boleh disimpan, serta nilai yang isinya boleh berganti selama program berjalan — asalkan bertipe sama. Ketika JVM mengeksekusi baris int umur = 17;, JVM menyisihkan memori seukuran satu int, mengisinya dengan nilai 17, lalu mencatat bahwa nama umur merujuk ke lokasi memori tersebut.

Karena Java statically typed, deklarasi variabel selalu menyebutkan tipe secara eksplisit:

java
int umur = 17;        // tipe int, nama umur, nilai awal 17
String nama = "Budi"; // tipe String (reference), nama nama
double berat = 62.5;  // tipe double, nama berat

Tiga baris di atas memperlihatkan pola yang sama: tipe nama = nilai;. Setelah variabel dideklarasikan, tipe variabel tersebut terkunci — variabel umur hanya boleh menampung bilangan bulat int hingga program selesai.

Deklarasi, Assignment, dan Reassignment #

Tiga istilah ini sering tercampur aduk, padahal maknanya berbeda:

  • Deklarasi: memperkenalkan nama variabel beserta tipenya, misalnya int stok;. Setelah deklarasi, nama sudah dikenal compiler, tetapi variabel lokal belum berisi nilai yang siap dipakai.
  • Assignment: mengisi nilai ke variabel dengan operator =, misalnya stok = 40;. Ekspresi di sisi kanan = dievaluasi lebih dulu, lalu hasilnya disimpan ke lokasi memori milik variabel di sisi kiri.
  • Reassignment: assignment kedua dan seterusnya — nilai baru menimpa nilai lama, nilai lama hilang diganti. Inilah asal kata variabel: isinya bervariasi.

Variabel dalam Aksi #

Program berikut menyimpan data seorang siswa bernama Budi dalam lima variabel bertipe berbeda, mencetak isinya, lalu mengubah sebagian nilai:

java BukuSaku.java
public class BukuSaku {
    public static void main(String[] args) {
        String nama = "Budi";
        int umur = 17;
        double tinggi = 168.5;
        boolean sudahMakan = false;
        char kelas = 'B';

        System.out.println("nama       = " + nama);
        System.out.println("umur       = " + umur);
        System.out.println("tinggi     = " + tinggi);
        System.out.println("sudahMakan = " + sudahMakan);
        System.out.println("kelas      = " + kelas);

        umur = umur + 1;            // reassignment: nilai lama diganti
        tinggi = 169.2;             // nilai baru menimpa nilai lama
        sudahMakan = true;          // boolean boleh dibalik

        System.out.println("--- setelah satu tahun ---");
        System.out.println("umur       = " + umur);
        System.out.println("tinggi     = " + tinggi);
        System.out.println("sudahMakan = " + sudahMakan);
    }
}

Output yang Dihasilkan:

text
nama       = Budi
umur       = 17
tinggi     = 168.5
sudahMakan = false
kelas      = B
--- setelah satu tahun ---
umur       = 18
tinggi     = 169.2
sudahMakan = true

Mari kita bedah baris-baris pentingnya:

  1. Baris 3-7 (lima baris deklarasi): masing-masing baris mendeklarasikan sekaligus menginisialisasi satu variabel — String untuk teks, int untuk bilangan bulat, double untuk bilangan desimal, boolean untuk keadaan benar/salah, dan char untuk satu karakter.
  2. Baris 9-13 (System.out.println(...)): mencetak isi tiap variabel. Operator + antara string dan variabel menggabungkan nilai variabel ke dalam teks.
  3. Baris 15 (umur = umur + 1;): reassignment yang membaca nilai lama umur (17), menjumlahkannya dengan 1, lalu menyimpan hasil 18 kembali ke umur.
  4. Baris 16-17 (tinggi = 169.2; dan sudahMakan = true;): nilai baru ditulis langsung menimpa nilai lama — tidak ada operator deklarasi tambahan.

Nilai Baru dihitung dari Nilai Lama #

Kekuatan variabel paling terasa ketika nilai baru dihitung dari nilai yang sudah ada. Simulasikan dompet Budi selama satu hari:

public class TabunganHarian {
    public static void main(String[] args) {
        int saldo = 50000;              // saldo awal Budi
        int setorBeli1 = 12000;         // jajan es teh
        int setorBeli2 = 8000;          // jajan roti

        saldo = saldo - setorBeli1;     // nilai baru dihitung dari nilai lama
        System.out.println("Setelah es teh : " + saldo);

        saldo = saldo - setorBeli2;
        System.out.println("Setelah roti   : " + saldo);

        int pemasukan = 20000;
        saldo = saldo + pemasukan;
        System.out.println("Setelah top-up : " + saldo);
    }
}

Output yang Dihasilkan:

text
Setelah es teh : 38000
Setelah roti   : 30000
Setelah top-up : 50000

Tiga baris kunci pada program di atas:

  1. Baris 3 (int saldo = 50000;): saldo dideklarasikan dan langsung diisi nilai awal — pola yang paling sering kita pakai.
  2. Baris 7 (saldo = saldo - setorBeli1;): sisi kanan dievaluasi lebih dulu (50000 - 12000 = 38000), hasilnya baru disimpan ke saldo. Dari titik ini, nilai 50000 sudah tidak dapat dipulihkan dari saldo.
  3. Baris 13 (saldo = saldo + pemasukan;): pola terhitung dari nilai lama berlanjut; variabel pemasukan yang baru muncul ikut terlibat dalam perhitungan.

Penamaan Variabel #

Compiler menerima nama apa pun yang sah menurut aturan identifier, tetapi pembaca kode adalah manusia. Konvensi Java untuk variabel adalah camelCase: huruf kecil di awal, kata berikutnya diawali huruf kapital — sudahMakan, setorBeli1, saldo. Nama sebaiknya mendeskripsikan data yang disimpan: saldo jauh lebih jelas daripada s atau x. Aturan lengkap identifier dan keyword telah kita bahas pada Chapter Identifier dan Keywords, jadi fokus kita di sini adalah kebiasaan menamai yang baik.

Dengan wadah nilai yang sudah siap dipakai, pertanyaan berikutnya natural: tipe apa saja yang disediakan Java dan seberapa besar data yang muat di masing-masing tipe? Chapter berikutnya membedah delapan primitive data types Java lengkap dengan rentang nilai dan ukuran memorinya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

BukuSaku.java

Unduh berkas
java
public class BukuSaku {
    public static void main(String[] args) {
        String nama = "Budi";
        int umur = 17;
        double tinggi = 168.5;
        boolean sudahMakan = false;
        char kelas = 'B';

        System.out.println("nama       = " + nama);
        System.out.println("umur       = " + umur);
        System.out.println("tinggi     = " + tinggi);
        System.out.println("sudahMakan = " + sudahMakan);
        System.out.println("kelas      = " + kelas);

        umur = umur + 1;            // reassignment: nilai lama diganti
        tinggi = 169.2;             // nilai baru menimpa nilai lama
        sudahMakan = true;          // boolean boleh dibalik

        System.out.println("--- setelah satu tahun ---");
        System.out.println("umur       = " + umur);
        System.out.println("tinggi     = " + tinggi);
        System.out.println("sudahMakan = " + sudahMakan);
    }
}

TabunganHarian.java

Unduh berkas
java
public class TabunganHarian {
    public static void main(String[] args) {
        int saldo = 50000;              // saldo awal Budi
        int setorBeli1 = 12000;         // jajan es teh
        int setorBeli2 = 8000;          // jajan roti

        saldo = saldo - setorBeli1;     // nilai baru dihitung dari nilai lama
        System.out.println("Setelah es teh : " + saldo);

        saldo = saldo - setorBeli2;
        System.out.println("Setelah roti   : " + saldo);

        int pemasukan = 20000;
        saldo = saldo + pemasukan;
        System.out.println("Setelah top-up : " + saldo);
    }
}