1. Operasi Boolean
Operator |
and &
dapat diterapkan tidak hanya pada angka, tetapi juga pada ekspresi boolean.
Tapi, seperti yang sudah Anda ketahui, ada &&
dan ||
operatornya. Mengapa kita menggunakan |
bukan ||
, dan &
bukan &&
? Apakah ada gunanya untuk ini? Sepertinya ada. Kadang-kadang.
Operator ||
and &&
logis dijalankan dari kiri ke kanan mengikuti apa yang disebut prinsip malas .
(expression1) || (expression2) || (expression3)
Jika expression1
sama dengan true
, tidak ada gunanya mengevaluasi expression2
dan expression3
: hasilnya akan true
terlepas.
Oleh karena itu, saat mengevaluasi ekspresi (dievaluasi dari kiri ke kanan), segera setelah kami mendapatkan true
, evaluasi ekspresi lainnya akan dilewati . Dan jika expression2
dan expression3
sertakan pemanggilan metode, metode ini tidak akan dipanggil !
Hal yang sama berlaku untuk &&
operator logika:
(expression1) && (expression2) && (expression3)
Jika expression1
sama dengan false
, tidak ada gunanya mengevaluasi expression2
dan expression3
: hasilnya akan false
terlepas.
Ini adalah fakta penting yang memungkinkan Anda menulis hal-hal seperti:
String s = null;
if (s != null && s.length() > 0) {
Contoh di atas tidak akan pernah memberi Anda NullPointerException , karena s.length()
hanya akan dieksekusi jika bagian pertama s! = null
adalah true
.
Jika s
sama dengan null
, bagian di sebelah kiri operator &&
adalah false
, maka hasil dari seluruh ekspresi boolean adalah false
, sehingga bagian di sebelah kanan ( s.length() > 0
) tidak dievaluasi.
Jika Anda menggunakan |
operator atau &
operator, maka tidak ada evaluasi malas : setiap subekspresi akan selalu dievaluasi.
2. Operasi diutamakan di Jawa
Seperti yang mungkin Anda ingat dari kelas matematika sekolah menengah Anda, operator perkalian memiliki prioritas lebih tinggi daripada operator penjumlahan. Tanda kurung memiliki prioritas yang lebih tinggi: ekspresi dalam tanda kurung dievaluasi terlebih dahulu, kemudian perkalian dan pembagian, lalu penjumlahan dan pengurangan.
Operator di Java juga memiliki urutan prioritas. Perbedaannya adalah a) jumlahnya sedikit lebih banyak, b) untuk beberapa operator, operan dievaluasi dari kiri ke kanan, sedangkan untuk yang lain — dari kanan ke kiri.
Ini adalah tabel dengan semua operator Java:
Kategori | Operator | Asosiatif |
---|---|---|
Postfix | () [] . |
Dari kiri ke kanan |
Unary | ++ -- ! ~ |
Kanan ke kiri |
Perkalian | * / % |
Dari kiri ke kanan |
Aditif | + - |
Dari kiri ke kanan |
Bergeser | >> >>> << |
Dari kiri ke kanan |
Relasional | > >= < <= |
Dari kiri ke kanan |
Persamaan | == != |
Dari kiri ke kanan |
Sedikit demi sedikitAND |
& |
Dari kiri ke kanan |
Exclusive OR (XOR) |
^ |
Dari kiri ke kanan |
Sedikit demi sedikitOR |
| |
Dari kiri ke kanan |
LogisAND |
&& |
Dari kiri ke kanan |
LogisOR |
|| |
Dari kiri ke kanan |
Bersyarat | ?: |
Kanan ke kiri |
Penugasan | = += -= *= /= %= >>= <<= &= ^= |= |
Kanan ke kiri |
Koma | , |
Dari kiri ke kanan |
Baris teratas berisi operator dengan prioritas tertinggi. Tanda kurung ()
digunakan untuk menetapkan prioritas secara eksplisit. Kurung siku []
digunakan untuk mengakses elemen pada indeks tertentu dari variabel array. Operator titik ( .
) digunakan untuk mengakses bidang dan metode menggunakan referensi ke objek atau kelas.
Semakin rendah operator dalam tabel, semakin rendah prioritasnya.
Jika Anda menggunakan banyak operator dalam sebuah ekspresi, jangan malas: tambahkan tanda kurung.
Di Jawa, Anda dapat menulis sesuatu seperti if (a & 1<< b > ~c)
, tetapi tidak seharusnya. Anda sedang menulis kode tidak hanya untuk kompiler, tetapi juga untuk pemrogram lain. Semakin mudah dibaca kodenya, semakin baik.
3. Penambahan awalan dan akhiran
Seperti yang sudah Anda ketahui, Java memiliki operator kenaikan ( ++
) dan operator penurunan ( --
). Masing-masing, mereka menambah dan mengurangi nilai variabel sebesar 1
.
Apa yang Anda mungkin tidak tahu adalah bahwa ada dua jenis operator ini: awalan (operator ditempatkan sebelum variabel) dan postfix (operator ditempatkan setelah variabel). Dan dua jenis operator bekerja sedikit berbeda.
Di Jawa, Anda dapat menulis ekspresi seperti ini:
int a = 5;
int b = a++;
Jika ++
operator muncul setelah variabel dan variabel adalah bagian dari beberapa ekspresi (seperti pada contoh di atas), maka ekspresi akan menggunakan nilai variabel saat ini, dan hanya setelah itu variabel akan dinaikkan sebesar 1
.
Dengan kata lain, hal seperti ini akan terjadi:
int a = 5;
int b = a;
a = a + 1;
Artinya, b
akan 5
, tidak 6
seperti yang Anda pikirkan pada pandangan pertama.
Jika ++
operator berada sebelum variabel dan variabel adalah bagian dari beberapa ekspresi, pertama-tama akan dinaikkan oleh 1
dan baru setelah itu nilainya akan digunakan dalam ekspresi.
int a = 5;
int b = ++a;
Contoh di atas sama dengan contoh berikut:
int a = 5;
a = a + 1;
int b = a;
Di sini, b
akan sama dengan 6
.
Bahkan ada contoh yang digunakan oleh pemrogram Java untuk menentukan apakah orang lain juga pemrogram Java:
int a = 5;
int b = ++a + ++a;
Yap, Anda juga bisa menulisnya.
Contoh ini akan dikompilasi dengan baik dan berubah menjadi seperti ini:
int a = 5;
a = a + 1;
int v1 = a;
a = a + 1;
int v2 = a;
int b = v1 + v2;
Untuk --
operator, semuanya persis sama.