java - ऐसा क्यों होता है यदि कथन, एक असाइनमेंट और समानता की जांच के साथ, गलत का मूल्यांकन करते हैं?




if-statement logic (3)

अगर एक असाइनमेंट और एक समानता की जांच OR -d एक साथ हो तो स्टेटमेंट कैसे काम करता है ??

public static void test() {
    boolean test1 = true; 
    if (test1 = false || test1 == false) {
        System.out.println("TRUE");
    } else {
        System.out.println("FALSE");
    }       
}

यह मुद्रण FALSE क्यों है?


अभिव्यक्ति आपके सोचने के तरीके को पार्स नहीं करती है। यह

(test1=false) || (test1 == false)

जिस स्थिति में परिणाम true , लेकिन

test1 = (false || test1 == false)

false || test1 == false का मूल्य false || test1 == false false || test1 == false अभिव्यक्ति की गणना पहले की गई है, और यह false , क्योंकि test1 गणना में true होने के लिए निर्धारित है।

कारण इस तरह से पार्स किया जाता है कि precedence || == ऑपरेटर की तुलना में कम है, लेकिन असाइनमेंट ऑपरेटर की पूर्वता से अधिक है =


यह एक पूर्ववर्ती मुद्दा है, मूल रूप से। आप मान रहे हैं कि आपका कोड इसके बराबर है:

if ((test1 = false) || (test1 == false))

... लेकिन ऐसा नहीं है। यह वास्तव में इसके बराबर है:

if (test1 = (false || test1 == false))

... जो इसके बराबर है:

if (test1 = (false || false))

(क्योंकि test1 साथ शुरू करने के लिए true है)

... जो इसके बराबर है:

if (test1 = false)

जो test1 के मान को false test1 , अभिव्यक्ति के परिणाम के false होने के साथ।

ऑपरेटर वरीयता की एक उपयोगी तालिका के लिए ऑपरेटरों पर जावा ट्यूटोरियल देखें।


(test1 = false || test1 == false) गलत है, क्योंकि दोनों झूठे हैं। (test1 = false || test1 == true) यह सच है क्योंकि उनमें से एक सच है





logic