2011-05-12 16 views
13

ऐसा क्यों काम करता है:जावा, असंभव कास्ट ऑब्जेक्ट फ्लोट ..... क्यों?

Object prova = 9.2; 
System.out.println(prova); 
Double prova2 = (Double) prova; 
System.out.println(prova2); 

और यह नहीं करता है?

Object prova = 9.2; 
System.out.println(prova); 
Float prova2 = (Float) prova; 
System.out.println(prova2); 

मैं इस बात की मेरी जावा एंड्रॉयड आवेदन कारण में 1 घंटे के लिए खो दिया तो मैं एक नाव में एक डबल में और डबल की तुलना में यह कास्ट करने के लिए था या मैं एक अपवाद

+1

यदि आप बाद से अपवाद पाठ को पढ़ने तो के रूप में यह कास्टिंग (जो मैं मुझे लगता है कि 'क्लासकास्टएक्सप्शन' है), और फिर 'फ्लोट' और 'डबल' के लिए विरासत पदानुक्रम देखें, उत्तर स्पष्ट होना चाहिए। – Anon

उत्तर

16

क्योंकि आप autoboxing पर भरोसा कर रहे हैं जब आप ने लिखा

Object prova = 9.2; 

आप इसे एक फ्लोट होना चाहते हैं, कोशिश

Object prova = 9.2f; 

याद रखें कि java.lang.Float और java.lang.Double भाई प्रकार हैं; आम प्रकार यदि आप एक जो कुछ भी प्रारूप में संख्या व्यक्त करते हैं, APIs का उपयोग करना चाहते हैं, उदाहरण के Number.floatValue()

8

था क्योंकि prova एक Double है , और DoubleFloat का उप प्रकार नहीं है। इस तरह 9.2f (जिसमें मामले prova वास्तव में एक Float होगा) या, आप सकता है यह:

या तो आप एक नाव शाब्दिक साथ शुरू कर सकता है

Float prova2 = ((Double) prova).floatValue(); 
+0

इससे कोई फर्क नहीं पड़ता कि फ्लोट डबल का उपप्रकार है, तो कलाकारों ने वैसे भी काम नहीं किया होगा। – jarnbjo

+0

ठीक है, इसे गलत क्रम में मिला। अब बेहतर है? – aioobe

14

9.2 एक डबल शाब्दिक है। इसके बजाय 9.2f आज़माएं।

Object prova = 9.2f; // float literal is auto-boxed to a Float 
System.out.println(prova); 
Float prova2 = (Float) prova; // Float can be cast to Float, while Double cannot 
System.out.println(prova2); 

त्रुटि संदेश (जो आप शायद अपने प्रश्न में शामिल किया जाना चाहिए था) बहुत अच्छी तरह से भी यह बताते हैं:

Exception in thread "main" java.lang.ClassCastException: 
    java.lang.Double cannot be cast to java.lang.Float 
+0

आप यह भी जांच सकते हैं कि 'System.out.println (prova.getClass()) जोड़कर क्या हो रहा है; ' – leonbloy

2

के लिए क्योंकि अगर आप निर्दिष्ट नहीं करते हैं, यह एक डबल हो जाएगा java.lang.Number

है। आप इसे एक नाव होना चाहते हैं, तो आप

Object prova = 9.2F; 
System.out.println(prova); 
Float prova2 = (Float) prova; 
System.out.println(prova2); 
0

जरूरत कोशिश फ्लोट नहीं नाव सरल

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