2010-12-04 10 views
5

वहाँ निम्नलिखित जावा कोड के निष्पादन की गारंटी अनुक्रम है?अनुक्रम अंक

+0

नोट, जावा गारंटी देता है कि विधि क्रम में बुलाया जाता है, हालांकि सीपीयू लोड को फिर से ऑर्डर कर सकता है अगर इसका परिणाम पर कोई प्रभाव नहीं पड़ता है। उदाहरण के लिए यदि बी कैश में है लेकिन ए नहीं है, तो यह बी लोड करने से पहले ए को खत्म करने की प्रतीक्षा नहीं करेगा, लेकिन यह सुनिश्चित करेगा कि इसका परिणाम पर कोई प्रभाव नहीं पड़ेगा। –

+0

अब यह दिलचस्प है। दोनों कार्यों में एक दूसरे पर कोई क्लासिक साइडफैक्ट नहीं है। यह सिर्फ 'getA() 'निष्पादित करने में कुछ समय लग सकता है जबकि' getB() 'लगभग एक नो-ऑप है। मैं यह सुनिश्चित करना चाहता हूं कि जैसे ही पहला लौटाता है, दूसरा ऑर्डर देना महत्वपूर्ण है। मैं इसे निश्चित रूप से फिर से लिख सकता हूं। – milan

उत्तर

13

हाँ, यह है। जेएलएस से, धारा 15.7:

जावा प्रोग्रामिंग भाषा गारंटी देता है कि ऑपरेटरों के संचालन का मूल्यांकन एक विशिष्ट मूल्यांकन आदेश, अर्थात् बाएं से दाएं, में किया जाता है।

यह अनुशंसा की जाती है कि कोड इस विनिर्देशन पर महत्वपूर्ण रूप से भरोसा न करें। कोड आमतौर पर स्पष्ट होता है जब प्रत्येक अभिव्यक्ति में अधिकांश बाहरी प्रभाव होते हैं, क्योंकि इसका बाहरी ऑपरेशन होता है, और जब कोड अभिव्यक्ति के बाएं से दाएं मूल्यांकन के परिणामस्वरूप बिल्कुल अपवाद पर निर्भर नहीं होता है।

...

एक द्विआधारी ऑपरेटर के बाएँ हाथ संकार्य से पहले दायां संकार्य के किसी भी हिस्से को पूरी तरह से मूल्यांकन किया जाता है मूल्यांकन किया जाना प्रतीत होता है।

और यह भी:

जावा प्रोग्रामिंग भाषा भी गारंटी देता है कि (एक ऑपरेटर के हर संकार्य सशर्त ऑपरेटरों & &, ||, और :) प्रकट होता है को छोड़कर पूरी तरह से किसी भी भाग से पहले मूल्यांकन किया जाना? ऑपरेशन का ही प्रदर्शन किया जाता है।

+0

आपको जवाब पढ़ने से मुझे याद आता है कि मुझे पहले से ही पता था :) – milan