Bagaimana pernyataan Java if bekerja ketika memiliki penugasan dan pemeriksa kesetaraan OR
-d bersama-sama ??
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
Mengapa pencetakan ini SALAH?
java
if-statement
logic
RoHaN
sumber
sumber
test1=false
,test1==false
adalahfalse
,false || false
adalahfalse or false
yang manafalse
.test1 = true
Jawaban:
Ekspresi tidak diurai seperti yang Anda pikirkan. Ini bukan
dalam hal ini hasilnya akan seperti itu
true
, tapiNilai
false || test1 == false
ekspresi dihitung pertama kali, dan itufalse
, karenatest1
diatur untuktrue
masuk ke komputasi.Alasan itu diurai dengan cara ini adalah bahwa didahulukan dari
||
lebih rendah dibandingkan dengan==
operator, tetapi lebih tinggi dari didahulukan dari operator penugasan=
.sumber
((test1 = false) || test1 == false)
nilai keseluruhannya adalahtrue
.==
atas||
, tetapi di=
bawah||
.||
). Urutan relatif dari||
dan==
hanya relevan untuk menunjukkan bahwa penguraian tidak seperti dalamtest1 = ((false || test1) == false)
, yang menurut saya tidak akan diharapkan oleh siapa pun (dengan cara bahwa prioritas relatif, atau lebih umum||
,&&
memiliki prioritas lebih rendah daripada relasi, juga mudah dilakukan. ingat, karena digunakan sepanjang waktu).||
dan==
vs||
dan=
menjelaskan mengapa ini berperilaku berbeda dari kasus (umum)a == b || c == d
.Ini adalah masalah prioritas, pada dasarnya. Anda berasumsi bahwa kode Anda setara dengan:
... tapi tidak. Ini sebenarnya setara dengan:
... yang setara dengan:
(karena
test1
initrue
untuk memulai dengan)... yang setara dengan:
yang menetapkan nilai
false
ketest1
, dengan hasil ekspresi menjadifalse
.Lihat tutorial Java tentang operator untuk tabel berguna tentang prioritas operator.
sumber
Ekspresi
test1 = false || test1 == false
akan dievaluasi pada langkah berikutnya.LANGKAH: 1-
test1 = false || test1 == false
// diutamakan dari==
yang tertinggiLANGKAH: 2-
test1 = false || false
// Operator||
memiliki prioritas lebih tinggiLANGKAH: 3-
test1 = false
LANGKAH: 4-
false
Karena nilai ekspresi boolean menjadi false. Jadi pernyataan lain sedang dieksekusi.
sumber
(test1 = false || test1 == false)
mengembalikan salah, karena keduanya salah.(test1 = false || test1 == true)
ini benar karena salah satunya benarsumber