Syarat pada dunia nyata jarang berdiri sendiri. Sebuah siswa lulus bila nilai ujian minimal 75 dan kehadiran minimal 80 persen; kasir menerima transaksi bila stok tersedia atau barang masih bisa dipesan. Operator logika pada Java — && (logical AND), || (logical OR), dan ! (logical NOT) — berfungsi menggabungkan nilai boolean dari beberapa perbandingan menjadi satu kesimpulan akhir. Chapter ini membahas tabel kebenaran ketiga operator tersebut, cara merangkai kondisi majemuk, serta hubungannya dengan operator & dan | yang terlihat mirip tetapi berperilaku berbeda.

Tiga Operator Logika #

Operator && menghasilkan true hanya bila kedua operand bernilai true. Operator || menghasilkan true bila salah satu operand (atau keduanya) bernilai true. Operator ! adalah operator unary yang membalik nilai — !true menjadi false dan sebaliknya. Alat baku untuk memahami perilaku ketiganya adalah tabel kebenaran berikut.

public class TabelKebenaran {
    public static void main(String[] args) {
        System.out.println("p      q      p && q  p || q  !p");
        System.out.println("--------------------------------");

        boolean[] nilai = {false, true};
        for (boolean p : nilai) {
            for (boolean q : nilai) {
                System.out.printf("%-7b%-7b%-8b%-8b%-7b%n", p, q, p && q, p || q, !p);
            }
        }
    }
}

Output yang Dihasilkan:

text
p      q      p && q  p || q  !p
--------------------------------
false  false  false   false   true   
false  true   false   true    true   
true   false  false   true    false  
true   true   true    true    false  

Mari kita telaah baris-baris kode di atas:

  1. Baris 6 (boolean[] nilai = {false, true};): array dua elemen yang menjadi sumber seluruh kombinasi operand.
  2. Baris 7-8 (for bersarang): loop luar memilih nilai p, loop dalam memilih nilai q — menghasilkan empat kombinasi lengkap: false false, false true, true false, true true.
  3. Baris 9 (System.out.printf(...)): mengevaluasi p && q, p || q, dan !p untuk setiap kombinasi, lalu mencetak kelima kolom dengan format %-7b agar boolean rata kiri dalam kolom tetap.

Perhatikan baris ketiga dan keempat pada output: ketika p bernilai false, hasil p && q pasti false apa pun nilai q — inilah pintu masuk perilaku short-circuit yang kita bahas tuntas pada Chapter khusus di akhir Section ini.

Menggabungkan Beberapa Kondisi #

Dalam praktik, operator logika dipakai untuk merangkai hasil operator perbandingan dari Chapter sebelumnya. Pola yang paling sering muncul: simpan setiap syarat sebagai variabel boolean yang bernama deskriptif, lalu gabungkan dengan && atau ||. Pembacaan kode menjadi jauh lebih mirip kalimat syarat yang sesungguhnya, dan operator ! tinggal membalik kesimpulan yang sudah ada.

public class LogikaKondisi {
    public static void main(String[] args) {
        int nilaiUjian = 78;
        int kehadiran = 90;

        boolean lulusNilai = nilaiUjian >= 75;
        boolean lulusHadir = kehadiran >= 80;

        boolean lulus = lulusNilai && lulusHadir;
        boolean perluRemedial = !lulusNilai || !lulusHadir;

        System.out.println("Lulus nilai    : " + lulusNilai);
        System.out.println("Lulus hadir    : " + lulusHadir);
        System.out.println("Lulus akhir    : " + lulus);
        System.out.println("Perlu remedial : " + perluRemedial);
    }
}

Output yang Dihasilkan:

text
Lulus nilai    : true
Lulus hadir    : true
Lulus akhir    : true
Perlu remedial : false

Baris 6-7 mengevaluasi dua perbandingan menjadi boolean. Baris 9 menggabungkan keduanya dengan &&: karena lulusNilai dan lulusHadir sama-sama true, variabel lulus bernilai true. Baris 10 memakai ! pada masing-masing variabel lalu || — siswa perlu remedial bila salah satu syarat tidak terpenuhi.

Operator & dan | pada Boolean #

Java masih menyediakan operator & dan | yang juga bekerja pada boolean. Perbedaannya: & dan | selalu mengevaluasi kedua operand, sedangkan && dan || berhenti lebih awal begitu kesimpulan sudah pasti. Karena itu & dan | disebut operator non-short-circuit — berguna hanya bila kedua operand memang harus dievaluasi penuh, misalnya ketika keduanya memanggil method dengan efek samping yang wajib berjalan.

Untuk kondisi biasa, gunakan && dan ||: evaluasinya lebih hemat dan, lebih penting lagi, memungkinkan pola pemeriksaan berlapis seperti s != null && s.length() > 0 yang aman terhadap null. Java juga memiliki operator ^ (XOR) pada boolean yang bernilai true bila kedua operand berbeda — jarang dipakai, tetapi berguna untuk logika eksklusif.

Nilai boolean hasil operator logika siap dipakai sebagai kondisi pada statement if dan loop. Namun &, |, dan ^ punya kehidupan kedua yang lebih tua: ketiganya bekerja pada tingkat bit bilangan. Chapter berikutnya mengupas bitwise operators tersebut beserta trik membaca hasilnya dalam bentuk biner.

Referensi #

Berkas Sumber

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

LogikaKondisi.java

Unduh berkas
java
public class LogikaKondisi {
    public static void main(String[] args) {
        int nilaiUjian = 78;
        int kehadiran = 90;

        boolean lulusNilai = nilaiUjian >= 75;
        boolean lulusHadir = kehadiran >= 80;

        boolean lulus = lulusNilai && lulusHadir;
        boolean perluRemedial = !lulusNilai || !lulusHadir;

        System.out.println("Lulus nilai    : " + lulusNilai);
        System.out.println("Lulus hadir    : " + lulusHadir);
        System.out.println("Lulus akhir    : " + lulus);
        System.out.println("Perlu remedial : " + perluRemedial);
    }
}

TabelKebenaran.java

Unduh berkas
java
public class TabelKebenaran {
    public static void main(String[] args) {
        System.out.println("p      q      p && q  p || q  !p");
        System.out.println("--------------------------------");

        boolean[] nilai = {false, true};
        for (boolean p : nilai) {
            for (boolean q : nilai) {
                System.out.printf("%-7b%-7b%-8b%-8b%-7b%n", p, q, p && q, p || q, !p);
            }
        }
    }
}