2010-01-08 25 views
26

मान लीजिए मैं निम्नलिखित अभिव्यक्तिजावा में मूल्यांकन के बूलियन अभिव्यक्ति क्रम?

ग्रहण मुझे चेतावनी दी है कि myString बूलियन अभिव्यक्ति की दूसरी वाक्यांश में अशक्त हो सकता है। हालांकि, मुझे कुछ पता है कि कुछ संकलक पूरी तरह विफल होने पर पूरी तरह से बूलियन अभिव्यक्ति से बाहर निकलेंगे। क्या जावा के साथ यह सच है? या मूल्यांकन का आदेश गारंटी नहीं है?

+0

आप किस कंपाइलर या उपकरण का उपयोग कर रहे हैं? – notnoop

+0

यह क्यों मायने रखता है? – danben

+0

खैर, जावैक (सबसे आम संकलक) शून्यता के बारे में चेतावनी नहीं देता है। अगर "जावा मुझे चेतावनी देता है कि MyString शून्य हो सकता है", तो संभवतः यह एक छोटी गाड़ी उपकरण है। "जावा चेतावनी" जैसी कोई चीज नहीं है। – notnoop

उत्तर

44

हालांकि, मुझे कुछ पता है कि कुछ संकलक पूरी तरह विफल होने पर पूरी तरह से बूलियन अभिव्यक्ति से बाहर निकलेंगे। क्या जावा के साथ यह सच है?

हां, यह जाना जाता है के रूप में Short-Circuit evaluation .Operators && और || तरह ऑपरेटरों कि इस तरह की कार्रवाई करने हैं।

या मूल्यांकन का आदेश गारंटी नहीं है?

नहीं, मूल्यांकन के आदेश की गारंटी है (बाएं से दाएं)

1

हां, जावा इस तरह के बयान के आलसी मूल्यांकन का अभ्यास करता है। अगर myString == null, तो शेष कथन का मूल्यांकन नहीं किया जाएगा

7

जावा को बाएं से दाएं अपने बयानों का मूल्यांकन करना चाहिए। यह दूसरी, तीसरी, और एनएच शर्तों को परीक्षण करने से रोकने के लिए short-circuit evaluation नामक एक तंत्र का उपयोग करता है यदि पहला झूठा है।

तो, यदि आपकी अभिव्यक्ति myContainer != null && myContainer.Contains(myObject) और myContainer शून्य है, दूसरी स्थिति, myContainer.Contains(myObject) का मूल्यांकन नहीं किया जाएगा।

संपादित करें: जैसा कि किसी और ने बताया है, विशेष रूप से जावा में बुलियन स्थितियों के लिए शॉर्ट-सर्किट और गैर शॉर्ट-सर्किट ऑपरेटर दोनों होते हैं। && का उपयोग शॉर्ट-सर्किट मूल्यांकन को ट्रिगर करेगा, और & नहीं होगा।

+1

उद्धरण: 'दूसरी, तीसरी, और एनएच शर्तों को परीक्षण करने से रोकने के लिए यदि पहला झूठा है'। दरअसल यदि ऑपरेटर '||' है तो संकलक पहले अकेले से कुल मूल्य समाप्त नहीं कर सकता है यदि पहला झूठा है। – H2ONaCl

2

जेम्स और एड सही हैं। यदि आप किसी ऐसे मामले में आते हैं जिसमें आप पिछली असफल स्थितियों के बावजूद सभी अभिव्यक्तियों का मूल्यांकन करना चाहते हैं, तो आप गैर-शॉर्ट सर्किटिंग बूलियन ऑपरेटर & का उपयोग कर सकते हैं।

संबंधित मुद्दे