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 trueterlepas.

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 expression3sertakan pemanggilan metode, metode ini tidak akan dipanggil !

Hal yang sama berlaku untuk &&operator logika:

(expression1) && (expression2) && (expression3)

Jika expression1sama dengan false, tidak ada gunanya mengevaluasi expression2dan expression3: hasilnya akan falseterlepas.

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! = nulladalah true.

Jika ssama 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.

Semua itu untuk mengatakan:

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, bakan 5, tidak 6seperti yang Anda pikirkan pada pandangan pertama.

Jika ++operator berada sebelum variabel dan variabel adalah bagian dari beberapa ekspresi, pertama-tama akan dinaikkan oleh 1dan 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, bakan 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.