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 expression3
termasuk panggilan kaedah, kaedah ini tidak akan dipanggil !
Perkara yang sama berlaku untuk &&
pengendali logik:
(expression1) && (expression2) && (expression3)
Jika expression1
sama dengan false
, tidak ada gunanya menilai expression2
dan 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! = null
ialah true
.
Jika s
sama 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.
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, b
akan menjadi 5
, bukan 6
seperti yang anda fikirkan pada pandangan pertama.
Jika ++
pengendali berada sebelum pembolehubah dan pembolehubah adalah sebahagian daripada beberapa ungkapan, ia akan dinaikkan terlebih dahulu 1
dan 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, b
akan 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.
GO TO FULL VERSION