2016-02-05 7 views
9

मेरे पास नीचे दी गई एक छोटी जावा फ़ाइल है।cmd में संकलन करते समय त्रुटि लेकिन Netbeans में नहीं

class abc{ 
    public static void main(String args[]){ 
     Object a= 9; 
     int b= (int)a; 
     System.out.print(b); 
    } 
} 

यह cmd में संकलन करते समय त्रुटि देता है लेकिन नेटबीन्स में नहीं। साथ ही, जब मैं '(int) a' with '(Integer) a' को प्रतिस्थापित करता हूं, तो यह संकलित करता है और दोनों cmd ​​और Netbeans पर ठीक चलता है।

class abc{ 
    public static void main(String args[]){ 
     Object a= 9; 
     int b= (Integer)a; 
     System.out.print(b); 
    } 
} 

इसका कारण क्या है और मैं इसे कैसे ठीक कर सकता हूं?

संपादित करें: त्रुटि है कि पता चलता है, जबकि पहले कोड संकलन है:

C:\Users\ANKIT.ANKITSHUBHAM-PC>javac abc.java 
    abc.java:4: inconvertible types 
    found : java.lang.Object 
    required: int 
          int b= (int)a; 
             ^
    1 error 

संपादित करें: यह सवाल कास्टिंग के बारे में नहीं है। यह है कि जब मैं '(int)' का उपयोग कर int में ऑब्जेक्ट डाला जाता हूं तो cmd और Netbeans अलग-अलग व्यवहार करते हैं, लेकिन '(इंटीजर)' का उपयोग करते समय उसी तरह व्यवहार करते हैं।

+0

क्या आप त्रुटि पोस्ट कर सकते हैं। मुझे लगता है कि ऐसा इसलिए है क्योंकि नेटबीन स्मार्ट काम करता है और आपकी गलती को सीधे सुधारता है। – ctst

+1

संभावित डुप्लिकेट [जावा में एक int को ऑब्जेक्ट कैसे डाला जाए?] (Http://stackoverflow.com/questions/3661413/how-to-cast-an-object-to-an-int-in-java) । पूर्व कोड केवल जावा 7+ में मान्य है; मुझे लगता है कि आपके नेटबीन पुराने कंपाइलर का उपयोग कर रहे हैं। –

+0

@ctst मैंने त्रुटि पोस्ट की है। –

उत्तर

2

इस उदासीन व्यवहार के लिए कारण यह है कि Netbeans जावा 7 उपयोग कर रहा था लेकिन cmd अभी भी जावा 6. कास्टिंग का उपयोग कर '(int)' का उपयोग किया गया था जावा 6 में अनुमति नहीं है लेकिन जावा 7 में

अनुमति दी है था Cmd से जावा 7 का उपयोग कैसे करें? उत्तर:

  1. ओपन 'मेरा कंप्यूटर'
  2. क्लिक करें शीर्ष पर 'सिस्टम गुण' टैब।
  3. बाएं फलक पर 'उन्नत सिस्टम सेटिंग्स' पर क्लिक करें।
  4. 'पर्यावरण चर ...' बटन पर क्लिक करें।
  5. दो अनुभाग होंगे; हम उस पर परेशान हैं जो 'सिस्टम वैरिएबल' शीर्षक

  6. 'पथ' का चयन करें और संपादन बटन पर क्लिक करें।

  7. जावा 7 के जावैक का पता जोड़ें। मेरे मामले में, यह "सी: \ प्रोग्राम फ़ाइलें \ जावा \ jdk1.7.0_79 \ bin" था। इसमें javac.exe
  8. ठीक क्लिक करें।

    अब cmd से चलने का प्रयास करें। मुझे भरोसा है ये काम करेगा!

0

ऐसा इसलिए है क्योंकि आप Object को प्राचीन प्रकार के डेटा में नहीं डाल सकते हैं। दूसरे कोड नमूने में आप वास्तव में Object को Integer पर कास्टिंग कर रहे हैं और फिर इसे int पर अवांछित कर रहे हैं।

9

यहां होता:

Object a= 9; 

है:

  • int मूल्य 9 साथ बनाई गई है
  • इसे का उपयोग एक Integer में लपेटा जाता है स्वत: मुक्केबाजी
  • यह एक में संग्रहित है प्रकार Object

अब, अगली पंक्ति, Objectintजावा 6 में, ढाला नहीं जा सकता, क्योंकि यह तथ्य एक Integer, और नहीं एक आदिम प्रकार में है। इसे Integer पर डाला जा सकता है, और फिर ऑटो-अनबॉक्सिंग Integer से int निकालने का ख्याल रखती है।


अब "यह नेटबीन्स में क्यों काम करता है?"

नेटबीन्स कमांड लाइन javac करता है की तुलना में एक अलग कंपाइलर ( here देखें) का उपयोग करता है। यह शायद javac से भिन्न तरीके से व्यवहार करता है और यह अधिक सहनशील है - शायद यह Integer ऑटो-अनबॉक्स करता है जब इसे int पर डालने का प्रयास मिलता है।

एक अन्य उत्तर के अनुसार, जावा 7 इस परिस्थिति में ऑटो-अनबॉक्सिंग का समर्थन करता है, इसलिए संभावित कारण यह है कि आपकी कमांडलाइन javac जावा 6 से है जबकि आपके नेटबीन्स जावा 7 कंपाइलर (या उच्चतर) का उपयोग करते हैं।

+0

मैं cmbe में नेटबींस द्वारा उपयोग किए गए कंपाइलर का उपयोग कैसे कर सकता हूं? –

+0

मुझे नहीं पता कि आप क्या कर सकते हैं और हो सकता है, लेकिन मुझे नहीं लगता कि आपको * ऐसा करना चाहिए - आप जावा प्रोग्राम लिख रहे हैं, इसलिए इसे मानक जावा कंपाइलर द्वारा संकलित किया जाना चाहिए। –

+0

लेकिन कास्टिंग (int) कास्टिंग करना भी मानक है क्योंकि मैंने कहीं पढ़ा है कि जावा 7 इस प्रारूप को '(इंटीजर)' से अलग करता है। –

5

मैं कहना चाहता हूँ यह अलग संकलक संस्करणों (या स्रोत अनुपालन स्तर) की वजह से है:

$ javac abc.java -source 1.6 
warning: [options] bootstrap class path not set in conjunction with -source 1.6 
abc.java:4: error: incompatible types: Object cannot be converted to int 
     int b= (int)a; 
        ^
1 error 
1 warning 
$ javac abc.java -source 1.8 
$ java abc 
9 

ऐसा लगता है कि यह एक परिवर्तन जावा 7. देखें this question और संबद्ध जवाब में बनाया गया था।

कुछ अन्य उत्तरों को देखते हुए, मुझे लगता है कि यह इंगित करना महत्वपूर्ण होगा कि आपका कोड पूरी तरह से जावा 7 कोड मान्य है।

आपको नेटबीन कंपाइलर की आवश्यकता नहीं होगी, मैं कहूंगा कि ओरेकल वेबसाइट से जावा 8 स्थापित करें और आप कर चुके हैं। आपको केवल चिंता करने की आवश्यकता है यदि आपके कोड को जावा 6 पर चलाने की आवश्यकता है, जिस स्थिति में आपके कोड को पीछे-संगत होना चाहिए।

2

आप ऑब्जेक्ट को आदिम प्रकार के डेटा पर नहीं डाल सकते हैं, शायद नेटबीन आपके लिए एक बॉक्स करते हैं। आप दोनों पर्यावरण में संकलन के लिए किस जावा संस्करण का उपयोग कर रहे हैं?

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