2015-09-24 6 views
46

साथ जावा में यह 'यदि' मूल्यांकन मैं जहाँ मैं a को मान निर्दिष्ट करने के लिए था और b तो यह अभिव्यक्ति सही का आकलन मेरी जावा परीक्षण में यह सवाल था: दुर्भाग्य सेतीन एक साथ भाव

(a<=b && b<=a && a!=b) 

, मैं था कोई जवाब नहीं था कि जवाब क्या था।

+3

'ए' और' बी' के प्रकार क्या हैं? – Tunaki

+1

'ए' और 'बी' किसी भी संख्या रैपर हो सकते हैं जब तक वे वही हों। 'बाइट', 'कैरेक्टर' 'इंटीजर', 'लांग', 'फ्लोट',' डबल ''! =' संदर्भों की तुलना करता है लेकिन' <= 'अनबॉक्स किए गए मानों की तुलना करता है। –

+1

यदि आपको यह पहेली पसंद है, तो 'x! = X + 0' में तीन संभावित प्रकार हैं, और' x == -x' में 22 संभावित मान/प्रकार हैं। –

उत्तर

80

यहां एक साधारण चाल है।

आप इसे केवल बुलियन तर्क के साथ नहीं सोच सकते हैं। कि, इस संयोजन का उपयोग करना ...

  • ab के बराबर या उससे कम है, और
  • ba के बराबर या उससे कम है, और
  • ab
के बराबर नहीं है

... कभी भी true वापस नहीं आएगा।

हालांकि, != ऑपरेटर संदर्भों की तुलना करता है यदि उसके ऑपरेंड ऑब्जेक्ट्स हैं।

तो, निम्नलिखित true वापस आ जाएगी:

Integer a = 1; 
Integer b = new Integer(1); 
System.out.println(a<=b && b<=a && a!=b); 

यहां होता है: एक वस्तु संदर्भ के रूप में ab एक वस्तु संदर्भ के रूप में के बराबर नहीं है, हालांकि निश्चित रूप से वे बराबर पूर्णांक मूल्यों पकड़ो।

+0

यह मानता है कि 'इंटीजर' कभी भी इंटर्न नहीं होता है - जो उच्च मानों के लिए उचित धारणा है लेकिन कुछ जेवीएम कैश '-127 - 128' है। आप '10000' या कुछ का उपयोग करने के लिए बेहतर हो सकता है। – OldCurmudgeon

+15

@OldCurmudgeon - वह 'नया इंटीजर (1) का उपयोग कर रहा है, जो स्थानीय कैश से मूल्य वापस नहीं करता है (' Integer.valueOf() 'के विपरीत)। तो यह ठीक है मुझे लगता है :) – TheLostMind

+3

@OldCurmudgeon जवाब देने वाला था लेकिन ThwLostMind मुझे इसे हराया। स्पष्ट रूप से 'नया इंटीजर (इंट वैल्यू)' शुरू करना इंटर्निंग को अशुद्ध करता है। – Mena

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