1. Operasi Boolean

Operator |dan &boleh digunakan bukan sahaja pada nombor, tetapi juga pada ungkapan boolean.

Tetapi, seperti yang anda sedia maklum, terdapat &&dan ||pengendali. Mengapa kita akan menggunakan |bukannya ||, dan &bukannya &&? Adakah ada gunanya ini? Nampaknya ada. Kadang-kadang.

Pengendali ||dan logik dilaksanakan dari kiri ke kanan mengikut prinsip malas&& yang dipanggil .

(expression1) || (expression2) || (expression3)

Jika expression1 sama dengan true, tidak ada gunanya menilai expression2 dan expression3: hasilnya tidak kira true.

Oleh itu, apabila menilai ungkapan (ia dinilai dari kiri ke kanan), sebaik sahaja kami mendapat true, penilaian ungkapan yang lain dilangkau . Dan jika expression2 dan expression3termasuk panggilan kaedah, kaedah ini tidak akan dipanggil !

Perkara yang sama berlaku untuk &&pengendali logik:

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

Jika expression1sama dengan false, tidak ada gunanya menilai expression2dan expression3: hasilnya tidak kira false.

Ini adalah fakta penting yang membolehkan anda menulis perkara seperti:

String s = null;
if (s != null && s.length() > 0) {

Contoh di atas tidak akan memberikan anda NullPointerException , kerana s.length()hanya akan dilaksanakan jika bahagian pertama s! = nullialah true.

Jika ssama dengan null, bahagian di sebelah kiri pengendali &&ialah false, maka hasil bagi keseluruhan ungkapan boolean ialah false, jadi bahagian di sebelah kanan ( s.length() > 0) tidak dinilai.

Semua itu untuk dikatakan:

Jika anda menggunakan |operator atau &operator, maka tiada penilaian malas : setiap subungkapan akan sentiasa dinilai.



2. Keutamaan operasi di Jawa

Seperti yang anda mungkin ingat dari kelas matematik sekolah menengah anda, pengendali pendaraban mempunyai keutamaan yang lebih tinggi daripada pengendali penambahan. Tanda kurung mempunyai keutamaan yang lebih tinggi: ungkapan dalam kurungan dinilai dahulu, kemudian pendaraban dan pembahagian, dan kemudian penambahan dan penolakan.

Operator di Java juga mempunyai susunan keutamaan. Perbezaannya ialah a) terdapat lebih sedikit daripada mereka, b) bagi sesetengah pengendali, operan dinilai dari kiri ke kanan, manakala bagi yang lain — dari kanan ke kiri.

Berikut ialah jadual dengan semua pengendali Java:

kategori Operator berpersatuan
Postfix () [] . Dari kiri ke kanan
Unary ++ -- ! ~ Kanan ke kiri
Berganda * / % Dari kiri ke kanan
Aditif + - Dari kiri ke kanan
Beralih >> >>> << Dari kiri ke kanan
perhubungan > >= < <= Dari kiri ke kanan
Kesaksamaan == != Dari kiri ke kanan
BitwiseAND & Dari kiri ke kanan
Exclusive OR(XOR) ^ Dari kiri ke kanan
BitwiseOR | Dari kiri ke kanan
LogikAND && Dari kiri ke kanan
LogikOR || Dari kiri ke kanan
Bersyarat ?: Kanan ke kiri
Tugasan = += -= *= /= %= >>= <<= &= ^= |= Kanan ke kiri
Koma , Dari kiri ke kanan

Baris atas mengandungi pengendali dengan keutamaan tertinggi. Tanda kurung ()digunakan untuk menetapkan keutamaan secara eksplisit. Tanda kurung segi empat []sama digunakan untuk mengakses elemen pada indeks tertentu pembolehubah tatasusunan. Operator titik ( .) digunakan untuk mengakses medan dan kaedah menggunakan rujukan kepada objek atau kelas.

Semakin rendah pengendali dalam jadual, semakin rendah keutamaannya.

Jika anda menggunakan berbilang operator dalam ungkapan, jangan malas: tambah kurungan.

Di Jawa, anda boleh menulis sesuatu seperti if (a & 1<< b > ~c), tetapi anda tidak sepatutnya. Anda menulis kod bukan sahaja untuk pengkompil, tetapi juga untuk pengaturcara lain. Lebih mudah dibaca kod, lebih baik.



3. Kenaikan awalan dan pascafix

Seperti yang anda sedia maklum, Java mempunyai pengendali kenaikan ( ++) dan pengendali pengurangan ( --). Masing-masing, mereka meningkatkan dan mengurangkan nilai pembolehubah sebanyak 1.

Apa yang anda mungkin tidak tahu ialah terdapat dua jenis operator ini: awalan (operator diletakkan sebelum pembolehubah) dan postfix (operator diletakkan selepas pembolehubah). Dan dua jenis pengendali berfungsi sedikit berbeza.

Di Jawa, anda boleh menulis ungkapan seperti ini:

int a = 5;
int b = a++;

Jika ++pengendali muncul selepas pembolehubah dan pembolehubah adalah sebahagian daripada beberapa ungkapan (seperti dalam contoh di atas), maka ungkapan akan menggunakan nilai semasa pembolehubah, dan hanya selepas itu pembolehubah itu akan ditingkatkan sebanyak 1.

Dengan kata lain, sesuatu seperti ini akan berlaku:

int a = 5;
int b = a;
a = a + 1;

Iaitu, bakan menjadi 5, bukan 6seperti yang anda fikirkan pada pandangan pertama.

Jika ++pengendali berada sebelum pembolehubah dan pembolehubah adalah sebahagian daripada beberapa ungkapan, ia akan dinaikkan terlebih dahulu 1dan hanya selepas itu nilainya akan digunakan dalam ungkapan.

int a = 5;
int b = ++a;

Contoh di atas adalah bersamaan dengan contoh berikut:

int a = 5;
a = a + 1;
int b = a;

Di sini, bakan sama dengan 6.

Malah terdapat contoh yang digunakan oleh pengaturcara Java untuk menentukan sama ada orang lain juga pengaturcara Java:

int a = 5;
int b = ++a++a;

Ya, anda juga boleh menulis itu.

Contoh ini akan disusun 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;

Bagi --pengendali, semuanya betul-betul sama.