2017-09-04 8 views
6

और मैं त्रुटि मिलीविधि नाव के साथ शो 'असंगत प्रकार त्रुटि' अधिक भार नहीं बल्कि मैं इस विधि कोड ओवरलोडिंग की कोशिश की के साथ डबल

कोई उपयुक्त विधि जोड़ें (डबल, डबल)

के लिए मिला

कोड:

class Adder { 
    static float add(float a, float b) { 
     return a + b; 
    } 

    static int add(int a, int b) { 
     return a + b; 
    } 
} 

class TestOverloading1 { 
    public static void main(String[] args){ 
     System.out.println(Adder.add(11.5, 11.5)); 
     System.out.println(Adder.add(27, 21)); 
    } 
} 

लेखन पर, 11.5f पैरामीटर में, यह अच्छी तरह से काम करता है।

मैं here और here से फ्लोट और डबल के बीच अंतर को समझ गया।

तो, जावा डिफ़ॉल्ट रूप से पैरामीटर को डबल डेटाटाइप के रूप में क्यों लेता है? क्या इस तरह के पूर्वाग्रह के पीछे दोगुना उच्च परिशुद्धता है?

मुझे पता है कि यह डिफ़ॉल्ट रूप से डबल लेता है। लेकिन, मैं जानना चाहता हूं कि इसके पीछे क्या कारण है? करने के लिए उन शाब्दिक डाली:

+0

क्योंकि 11.5 एक डबल है। आप इसके साथ भी प्रयास कर सकते हैं: नया फ्लोट (11.5) – Stultuske

+2

@Stultuske लोगों को 'नई फ्लोट (11.5)' का उपयोग करने के लिए सुझाव देना बुरा सलाह है, फ्लोट शाब्दिक का उपयोग करते समय एक नया रैपर ऑब्जेक्ट क्यों पेश करें। –

+0

यह वास्तव में सलाह नहीं थी, एक संकेत यह है कि यह परीक्षण का एक और 'दृश्यमान' तरीका है कि एक फ्लोट के लिए यह काम करेगा – Stultuske

उत्तर

7

(इस तरह के 11.5 के रूप में) किसी भी प्रत्यय के बिना एक चल बिन्दु शाब्दिक परिभाषा के द्वारा प्रकार double की है के रूप में ए और बी की घोषणा (इसी तरह एक पूर्णांक किसी भी प्रत्यय के बिना शाब्दिक प्रकार int की है) ।

एक double पैरामीटर एक विधि है कि float तर्क स्वीकार करता है (के बाद से double से float करने के लिए एक कास्टिंग डेटा की हानि, और इसलिए संकलक में हो सकता है इस तरह के स्वचालित रूप से कास्टिंग प्रदर्शन नहीं करेगा) के लिए स्वीकार्य नहीं है।

दूसरी ओर, 11.5ffloat शाब्दिक है, इसलिए आप इस तरह के शाब्दिक को अपने add(float a,float b) विधि में पास कर सकते हैं।

4

Adder.add(11.5,11.5) 

कर कि does not स्थिर विधि में पैरामीटर से मेल

double a = 11.5; 
double b = 11.5; 
Adder.add(a, b) 

रूप में एक ही

static float add(float a,float b){return a+b;} 

ताकि आप के लिए आवश्यक हैं है फ्लोट:

Adder.add(11.5f, 11.5f); 

या नाव

float a = 11.5; 
float b = 11.5; 
Adder.add(a, b) 
2

"11.5" बिना कुछ भी जावा द्वारा डबल के रूप में माना जाता है। आप कुछ का उपयोग कर सकते हैं:

System.out.println(Adder.add(new Float(11.5),new Float(11.5))); 
0

यह केवल एक विनिर्देश है। जैसे कि int में जावा में डिफ़ॉल्ट मान 0 है।

डबल: डबल डेटा प्रकार एक डबल परिशुद्धता 64-बिट आईईईई 754 चल बिन्दु है

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

स्रोत: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

2

जावा में जब हम 11.5 के रूप में दशमलव संख्या टाइप करें, तो यह डबल के रूप में माना जाता है। डबल 64-बिट है जबकि फ्लोट 32-बिट है इसलिए रूपांतरण संभव नहीं है, यही कारण है कि संकलन समय अपवाद होता है। अधिक जानकारी के लिए कृपया देखें: Primitive Data Types

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