मुझे यकीन नहीं है कि जावा भाषा विनिर्देश में एक आइटम है जो एक चर के पिछले मूल्य को लोड करने का आदेश देता है ...
वहाँ है। अगली बार जब आप स्पष्ट न हों कि विनिर्देश क्या कहता है, कृपया विनिर्देश पढ़ें और फिर प्रश्न पूछें कि क्या यह अस्पष्ट है।
... सही पक्ष (x = y)
जो, कोष्ठक द्वारा निहित आदेश द्वारा, पहले गणना की जानी चाहिए।
वह कथन झूठा है। कोष्ठक मूल्यांकन का एक आदेश नहीं देते हैं । जावा में, कोष्ठकों की परवाह किए बिना, मूल्यांकन का क्रम दाईं ओर छोड़ दिया जाता है। कोष्ठक निर्धारित करते हैं कि उपसंचाई सीमाएं कहां हैं, मूल्यांकन का क्रम नहीं।
पहली अभिव्यक्ति झूठ का मूल्यांकन क्यों करती है, लेकिन दूसरा सच का मूल्यांकन करता है?
==
ऑपरेटर के लिए नियम यह है: मान का उत्पादन करने के लिए बाईं ओर का मूल्यांकन करें, मान का उत्पादन करने के लिए दाईं ओर का मूल्यांकन करें, मूल्यों की तुलना करें, तुलना अभिव्यक्ति का मूल्य है।
दूसरे शब्दों में, इसका अर्थ expr1 == expr2
हमेशा वही होता है, जैसा आपने लिखा था temp1 = expr1; temp2 = expr2;
और फिर मूल्यांकन किया था temp1 == temp2
।
=
बाईं ओर एक स्थानीय चर के साथ ऑपरेटर के लिए नियम है: एक चर का उत्पादन करने के लिए बाईं ओर का मूल्यांकन करें, एक मूल्य का उत्पादन करने के लिए दाईं ओर का मूल्यांकन करें, असाइनमेंट निष्पादित करें, परिणाम वह मान है जो असाइन किया गया था।
इसलिए इसे एक साथ रखें:
x == (x = y)
हमारे पास एक तुलना ऑपरेटर है। मान उत्पन्न करने के लिए बाईं ओर का मूल्यांकन करें - हमें वर्तमान मूल्य मिलता है x
। दाईं ओर मूल्यांकन करें: यह एक असाइनमेंट है इसलिए हम एक चर का उत्पादन करने के लिए बाईं ओर का मूल्यांकन करते हैं - चर x
- हम सही पक्ष का मूल्यांकन करते हैं - वर्तमान मूल्य y
- इसे असाइन करें x
और परिणाम असाइन किया गया मान है। हम तब x
असाइन किए गए मान के मूल मान की तुलना करते हैं ।
आप (x = y) == x
व्यायाम के रूप में कर सकते हैं । फिर, याद रखें, बाईं ओर के मूल्यांकन के सभी नियम दाईं ओर के मूल्यांकन के सभी नियमों से पहले होते हैं ।
मैंने अपेक्षा की होगी कि (x = y) पहले मूल्यांकन किया जाए, और फिर यह x की तुलना अपने आप से (3) करेगा और सही लौटेगा।
आपकी अपेक्षा जावा के नियमों के बारे में गलत मान्यताओं के एक सेट पर आधारित है। उम्मीद है कि अब आपके पास सही विश्वास है और भविष्य में सही चीजों की उम्मीद करेंगे।
यह प्रश्न "जावा एक्सप्रेशन में उपप्रकारों के मूल्यांकन के क्रम" से अलग है
यह कथन झूठा है। यह सवाल पूरी तरह से जर्मन है।
एक्स निश्चित रूप से यहां 'सबप्रेप्शन' नहीं है।
यह कथन भी असत्य है। यह प्रत्येक उदाहरण में दो बार एक उपसर्ग है ।
इसे 'मूल्यांकन' के बजाय तुलना के लिए लोड करने की आवश्यकता है।
मुझे इसका मतलब नहीं मालूम है।
स्पष्ट रूप से आपके पास अभी भी कई गलत विश्वास हैं। मेरी सलाह है कि आप विनिर्देश पढ़ें जब तक कि आपके झूठे विश्वासों को सच्चे विश्वासों द्वारा प्रतिस्थापित नहीं किया जाता है।
प्रश्न जावा-विशिष्ट है और एक्सप्रेशन इंटरव्यू के प्रश्नों के लिए आमतौर पर तैयार किए गए अव्यवहारिक निर्माणों के विपरीत एक्स == (एक्स = वाई), एक वास्तविक परियोजना से आया है।
अभिव्यक्ति की सिद्धता सवाल के लिए प्रासंगिक नहीं है। इस तरह के भावों के नियम विनिर्देश में स्पष्ट रूप से वर्णित हैं; इसे पढ़ें!
यह तुलना-और-मुहावरे के लिए एक-पंक्ति प्रतिस्थापन माना जाता था
चूँकि उस एक-पंक्ति के प्रतिस्थापन ने आप में बहुत भ्रम पैदा किया, कोड के पाठक, मैं सुझाव दूंगा कि यह एक खराब विकल्प था। कोड को अधिक संक्षिप्त बनाना लेकिन समझना कठिन नहीं एक जीत है। इससे कोड के तेज होने की संभावना नहीं है।
संयोग से, C # ने एक लाइब्रेरी पद्धति के रूप में तुलना और प्रतिस्थापित किया है, जिसे मशीन अनुदेश के साथ जोड़ा जा सकता है। मेरा मानना है कि जावा में ऐसी कोई विधि नहीं है, क्योंकि यह जावा प्रकार प्रणाली में प्रतिनिधित्व नहीं कर सकता है।