2011-01-21 20 views
8

तो मुझे एक स्ट्रिंग मिल गई है और मैं एक मूल्य के रूप में स्ट्रिंग के साथ एक डबल ऑब्जेक्ट बनाना चाहता हूं।Double.valueOf (स्ट्रिंग एस) और नए डबल (स्ट्रिंग एस) को कॉल करने के बीच क्या अंतर है?

मैं

Double myDouble = new Double (myString);

कॉल कर सकते हैं या मैं

Double myDouble = Double.valueOf(myString);

कॉल कर सकते हैं कि वहाँ एक अंतर है? मैं पहली गारंटी देता हूं कि ढेर पर एक नई वस्तु बनाई गई है और दूसरा किसी मौजूदा ऑब्जेक्ट का पुन: उपयोग कर सकता है।

अतिरिक्त क्रेडिट के लिए: स्ट्रिंग अशक्त, जिस स्थिति में मैं डबल अशक्त होना चाहते हैं, लेकिन दोनों के ऊपर फेंक एक NullPointerException हो सकता है। वहाँ कम कोड में

Double myDouble = myString == null ? null : Double.valueOf(myString);

लेखन का एक तरीका है?

+3

* आप कैसे अतिरिक्त क्रेडिट देना चाहते हैं ?? आप प्रत्येक उत्तर में * एक * अपवॉट तक सीमित हैं ;-) –

+1

* मैं पहली गारंटी देता हूं कि ढेर पर एक नई वस्तु बनाई गई है और दूसरा मौजूदा ऑब्जेक्ट का पुन: उपयोग कर सकता है।* आप सही ढंग से अनुमान लगा रहे हैं :-) –

+2

@Andreas_D - मैं शायद किसी के पेपैल खाते में 1,000,000 अमरीकी डालर का भुगतान कर रहा था, लेकिन आप सही हैं: स्टैक ओवरफ्लो प्रतिनिधि कहीं अधिक मूल्यवान है, इसलिए मैं उस प्रस्ताव को वापस लेता हूं; -] –

उत्तर

3

कार्यान्वयन पर निर्भर करता है।

this(valueOf(s).doubleValue()); 

तो यह valueOf(String s) आंतरिक और कॉल कि विधि सीधे कॉल की तुलना में कम कुशल होना चाहिए: openJDK 6 b14Double(String s) के इस कार्यान्वयन उपयोग करता है।

+1

इस उत्तर को स्वीकार करते हुए क्योंकि यह "कार्यान्वयन पर निर्भर करता है" वाक्यांश से शुरू होता है, जो कि अन्य उत्तरों से लगता है वास्तव में मामला है। –

3

आपकी धारणा सही है। स्ट्रिंग का डबल आउट करने का दूसरा तरीका तेज़ हो सकता है क्योंकि मान कैश से वापस किया जा सकता है।

दूसरे प्रश्न के संबंध में, आप एक सहायक नाल सुरक्षित विधि बना सकते हैं जो NullPointerException को फेंकने के बजाए एक शून्य को वापस कर देगा।

+0

के लिए उपरोक्त बोनस क्रेडिट प्रश्न का उत्तर देना ;-) –

3
अपाचे से

public static Double valueOf(String string) throws NumberFormatException { 
      return new Double(parseDouble(string)); 
} 

&

public Double(String string) throws NumberFormatException { 
      this(parseDouble(string)); 
} 

सूरज [ओरेकल] JDK से

public Double(String s) throws NumberFormatException { 
    // REMIND: this is inefficient 
    this(valueOf(s).doubleValue()); 
    } 

&

public static Double valueOf(double d) { 
     return new Double(d); 
    } 
+0

क्या यह वास्तविक स्रोत कोड किसी विशेष JVM कार्यान्वयन से है? कौन सा पहचानने में मदद कर सकता है। –

+1

अपडेट ................. –

2

जो भी कोई अंतर नहीं, कम से कम ओरेकल JDK 1.6 में:

public Double(String s) throws NumberFormatException { 
// REMIND: this is inefficient 
this(valueOf(s).doubleValue()); 
} 
+1

अंतर में टिप्पणी है। valueOf() एक डबल ऑब्जेक्ट बनाता है, नया डबल() दो बनाता है। –

0

यदि आप प्रदर्शन के बारे में चिंतित हैं तो आपको एक आदिम का उपयोग करने पर विचार करना चाहिए।

double myDouble = Double.parseDouble(myString); 
+0

हालांकि, आसपास के सभी महत्वपूर्ण शून्य मानों को पार करना कठिन बनाता है। (कृपया नाएन पास करने का सुझाव न दें!) –

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