2012-06-22 20 views
13

निम्न में से दोनों की सामग्री को ब्लॉक निष्पादित किया जाना चाहिए अगर:क्या जावा में एक ब्लॉक में लॉजिकल ऑपरेटर या बिटवाई ऑपरेटर का उपयोग करने के बीच कोई अंतर है?

if(booleanFunction() || otherBooleanFunction()) {...} 
if(booleanFunction() | otherBooleanFunction()) {...} 

तो | का उपयोग कर या || का उपयोग कर के बीच अंतर क्या है?

नोट: मैंने इसमें देखा और मेरा अपना जवाब पाया, जिसे मैंने नीचे शामिल किया था। कृपया मुझे सही करने या अपना खुद का विचार देने के लिए स्वतंत्र महसूस करें। निश्चित रूप से सुधार के लिए जगह है!

+1

मुझे इस प्रश्न का मुद्दा नहीं मिलता है, आप एक प्रश्न पूछते हैं जिसे आप स्वयं जवाब देते हैं - इससे पहले कि कोई और उत्तर दे सके? – Nim

+1

शायद बैज खेती? – Durandal

+9

@ निम और डुरंडल: हम्म .. मैं इस बिंदु को याद कर सकता हूं, लेकिन [इस] के अनुसार (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your प्रश्न-प्रश्न /) यदि आप सोचते हैं कि यह दूसरों के लिए प्रासंगिक हो सकता है तो अपने प्रश्नों का उत्तर देना वास्तव में ठीक है। मैंने अपना खुद का प्रश्न हल किया और सोचा कि मैं साझा करूंगा, इसलिए मैं इसे यहां दस्तावेज करने की परेशानी में गया। किसी को भी – Miquel

उत्तर

11

लॉजिकल ऑपरेटर बूलियन पर काम करता है, और बिटवाई ऑपरेटर बिट्स पर काम करता है। इस मामले में, प्रभाव एक ही होने जा रहा है, लेकिन दो अंतर देखते हैं:

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

यहाँ यह साबित करने के लिए कुछ आसान कोड है:

public class OperatorTest { 

    public static void main(String[] args){ 
     System.out.println("Logical Operator:"); 
     if(sayAndReturn(true, "first") || sayAndReturn(true, "second")){ 
      //doNothing 
     } 

     System.out.println("Bitwise Operator:"); 
     if(sayAndReturn(true, "first") | sayAndReturn(true, "second")){ 
      //doNothing 
     } 
    } 

    public static boolean sayAndReturn(boolean ret, String msg){ 
     System.out.println(msg); 
     return ret; 
    } 
} 
34

दोनों के अलग-अलग उपयोग हैं। हालांकि कई मामलों में (बूलियन से निपटने पर) ऐसा प्रतीत होता है कि उनके पास एक ही प्रभाव है, यह ध्यान रखना महत्वपूर्ण है कि तार्किक-या शॉर्ट सर्किट है, जिसका अर्थ है कि यदि इसका पहला तर्क सत्य पर मूल्यांकन करता है, तो दूसरा तर्क शेष है unevaluated। Bitwise ऑपरेटर इसके दोनों तर्कों का मूल्यांकन किए बिना मूल्यांकन करता है।

इसी तरह, तार्किक-और शॉर्ट-सर्किट है, जिसका अर्थ है कि यदि इसका पहला तर्क गलत पर मूल्यांकन करता है, तो दूसरा अनचाहे छोड़ दिया जाता है। फिर, थोड़ा सा- और नहीं है।

आप कार्रवाई यहाँ में देख सकते हैं:

int x = 0; 
int y = 1; 
System.out.println(x+y == 1 || y/x == 1); 
System.out.println(x+y == 1 | y/x == 1); 

पहले प्रिंट बयान बस ठीक काम करता है और सच रिटर्न के बाद से पहला तर्क सही का आकलन है, और इसलिए मूल्यांकन बंद हो जाता है। दूसरी प्रिंट स्टेटमेंट त्रुटियां क्योंकि यह शॉर्ट सर्किट नहीं है, और शून्य से एक विभाजन का सामना करना पड़ता है।

4
if(booleanFunction() || otherBooleanFunction()) {...} 

इस हालत में booleanFunction() अगर रिटर्न true तो otherBooleanFunction() निष्पादित नहीं किया जाएगा।

if(booleanFunction() | otherBooleanFunction()) {...} 

लेकिन बिटवाइज़ ऑपरेटर में दोनों कार्य - booleanFunction() और otherBooleanFunction() कोई फर्क नहीं पड़ता booleanFunction() रिटर्न true या false

6
प्रोग्रामर के लिए

निष्पादित किया जाएगा, वहाँ केवल एक ही अंतर है।

  1. आपके लॉजिकल ऑपरेटर तार्किक हैं, यानी। वे केवल एक शर्त का परीक्षण करते हैं और उस पर आधारित परिणाम प्राप्त करते हैं।

बूलियन फ़ंक्शन() || अन्य BooleanFunction() सत्य होगा यदि कोई भी सत्य है। इसी प्रकार, बूलियन फ़ंक्शन() & & अन्य बूलियन फ़ंक्शन() गलत होने पर गलत होगा। तो, दूसरे का परीक्षण क्यों करें। यही लॉजिकल ऑपरेटर करते हैं।

लेकिन बिटवाईड दोनों दोनों की जांच करें। इस अवधारणा का एक लगातार आवेदन इस प्रकार है।

if(someObject != null && someObject.somemethod()) 

इसलिए, इस मामले में अगर आप &&& द्वारा की जगह तो एक आपदा के लिए प्रतीक्षा करें। आपको जल्द ही nullPointerException मिलेगा ...

0

बिटवाईड डी डी लॉजिकल ऑपरेटर- के बीच अंतर 1. बिटवाई ऑपरेटर बिट पर काम करता है जबकि लॉजिकल ऑपरेटर कथन पर काम करता है। 2. बिटवाई और & द्वारा दर्शाया गया है जबकि तार्किक और & & द्वारा दर्शाया गया है। 3. बिटवाई या द्वारा प्रतिनिधित्व किया जाता है जबकि तार्किक या प्रतिनिधित्व करता है ||।