दिलचस्प पोस्ट
मैं मौजूदा निष्पादन कोड के लिए HMODULE कैसे प्राप्त करूं? मैं कैसे जांचूं अगर एक प्रकार एक उपप्रकार या वस्तु का प्रकार है? प्रसारण प्राप्तकर्ता BOOT_COMPLETED प्राप्त नहीं कर रहा है विजुअल स्टूडियो "कोई सीपीयू" लक्ष्य क्या मतलब है? मैं जावास्क्रिप्ट के जरिए एक क्रॉस-डोमेन POST अनुरोध कैसे भेजूं? त्रुटि :: एपीके के पैकेजिंग के दौरान डुप्लिकेट फ़ाइलें सिद्धांत – वास्तविक एसक्यूएल को कैसे मुद्रित करें, न सिर्फ तैयार बयान? पायथन 2 सीएसवी लेखक विंडोज पर गलत लाइन टर्मिनेटर का उत्पादन करता है बल में अतिरंजना मेनू ActionBarSherlock मूल फ़ंक्शन से चर को असाइन करना: "असाइनमेंट से पहले संदर्भित स्थानीय चर" स्ट्रिंग मानों के सामने 'यू' का अर्थ क्या होता है? एक कन्स्ट्रक्टर से सेटर्स को बुला रहा है मैं गूगल मानचित्र एपीआई V3 में पैनिंग कैसे सीमित कर सकता हूं? XML विशेषता में न्यूलाइन कैसे सहेज सकते हैं? Std :: sort () में किस प्रकार का सॉर्टिंग उपयोग किया जाता है?

पद वृद्धि वेतन ऑपरेटर जावा

मैं joshua bloch द्वारा "java puzzlers" से निम्न कोड के सिर या पूंछ नहीं बना सकता।

public class Test22{ public static void main(String args[]){ int j=0; for(int i=0;i<100;i++){ j=j++; } System.out.println(j); //prints 0 int a=0,b=0; a=b++; System.out.println(a); System.out.println(b); //prints 1 } } 

मैं उस भाग को नहीं प्राप्त कर सकता जहां j 0 प्रिंट करता है। लेखक के मुताबिक,

 j=j++ 

के समान है

 temp=j; j=j+1; j=temp; 

परंतु

 a=b++ 

बी बनाता है 1. तो यह इस तरह से मूल्यांकन किया जाना चाहिए था,

 a=b b=b+1 

उसी तर्क का पालन करके, नहीं करना चाहिए

 j=j++ 

के रूप में मूल्यांकन किया जा,

 j=j j=j+1 

अस्थायी तस्वीर यहाँ कहां है? कोई स्पष्टीकरण बहुत सराहना की जाएगी << मैं इस पर अपना सिर तोड़ रहा हूँ। 😉 >> अग्रिम धन्यवाद

वेब के समाधान से एकत्रित समाधान "पद वृद्धि वेतन ऑपरेटर जावा"

चलो अपना तर्क तोड़ दो:

लेखक के अनुसार,

 j=j++; 

के समान है

 temp=j; j=j+1; // increment j=temp; // then assign 

हां, आप अभी तक सही हैं …, लेकिन यहां वह जगह है जहां आपको यह गलत मिला है:

परंतु

 a=b++; 

b=1 बनाता है तो यह इस तरह से मूल्यांकन किया जाना चाहिए था,

 a=b; // assign b=b+1; // then increment 

गलत! आप लगातार नियम लागू नहीं कर रहे हैं! आपने वेतन वृद्धि से ऑर्डर बदल दिया है, फिर आवंटित आवंटन के लिए आवंटित !!! इसका वास्तव में मूल्यांकन किया गया है:

 temp=b; b=b+1; // increment a=temp; // then assign 

मूल रूप से इस फ़ॉर्म के असाइनमेंट:

 lhs = rhs++; 

ऐसा कुछ करने के समान है:

 temp = rhs; rhs = rhs+1; // increment lhs = temp; // then assign 

इसे a = b++; लागू करें a = b++; । फिर भी इसे j = j++; । यही कारण है कि आपको परिणाम मिलता है जो आपको मिलता है।

आपने जो कुछ किया वह आप अपनी व्याख्या के साथ आया था जो a = b++; करता है – एक गलत व्याख्या जो उपरोक्त नियम का पालन नहीं करती है यह आपके भ्रम का स्रोत है।


यह भी देखें

  • जेएलएस 15.14.2 पोस्टफिक्स इंक्रीमेंट ऑपरेटर

    "… मूल्य 1 को वैरिएबल के मूल्य में जोड़ दिया जाता है और योग वापस वेरिएबल में जमा हो जाता है […] पोस्टफिक्स इंर्रीमेंट अभिव्यक्ति का मान नया मान संग्रहीत होने से पहले चर का मान है।"

पद वृद्धि वेतन ऑपरेटर ने एक अस्थायी चर का इस्तेमाल किया है। इससे दूसरे के तर्क को सेट करते हुए यह एक मान वापस करने की अनुमति देता है इसीलिए

 a = b++; 

b बढ़ा सकते हैं, लेकिन b के पुराने मान को सेट कर सकते हैं। उसी चीज़ के साथ चल रहा है

 j = j++; 

वेरिएबल दाहिने हाथ पर बढ़ी है, लेकिन जब यह असाइनमेन्ट होता है, तब इसे वापस पुराने मूल्य पर सेट कर दिया जाता है।

j++ के पुराने मूल्य का उपयोग करेगा और फिर इसे बढ़ाना होगा। लेकिन जब यह बाएं हाथ को ओवरराइट करता है, तो यह जम्मू के पुराने मूल्य का उपयोग करेगा।

यह उसके जैसा है :

 temp=j; j += 1; j=temp; // take the old value of j.