दिलचस्प पोस्ट
एडीबी रिमाउंट अनुमति से वंचित, लेकिन शेल में सुपर यूजर को एक्सेस करने में सक्षम – एंड्रॉइड RuntimeException के अलावा अन्य अपवाद जैक्सन ऑब्जेक्ट को जेएसआईएनआईडेंटिटी इन्फ़ोडा युक्त जावास्क्रिप्ट में डिस्रिअलाइज़ करना पता लगाएँ कि UIGestureRecognizer ऊपर, नीचे, बाएं और दाएं कोकोस 2 डी है ITextSharp सी # .net द्वारा एकाधिक पीडीएफ़ों को मर्ज करना जावास्क्रिप्ट या एक स्विच मामले में अभिव्यक्ति एकाधिक मोडल ओवरले बिल्ड लक्ष्य के बाहर जीसीसी डीबग प्रतीक कैसे उत्पन्न करें? WindowsForm एपीपी में खोलें WPF विंडो क्या कोई चयनकर्ता संसाधन किसी शैली में वर्णित रंग का उपयोग कर सकता है? शब्दों को शरीर के टेक्स्ट में बदलें अजगर के xlrd, xlwt, और xlutils.copy का उपयोग करके शैलियों को सुरक्षित रखें क्यों मेरी jQuery: नहीं () चयनकर्ता सीएसएस में काम नहीं कर रहा है? HttpsUrlConnection के लिए Android में SSLv3 कैसे अक्षम करें? स्पार्क java.lang.OutOfMemoryError: जावा हीप स्पेस

Integer.toString (int i) बनाम String.valueOf (int i)

मैं सोच रहा हूं कि विधि String.valueOf(int i) क्यों मौजूद है? मैं इस विधि को String में कनवर्ट करने के लिए प्रयोग कर रहा हूं और बस Integer.toString(int i) विधि की खोज की है।

इन विधियों के कार्यान्वयन को देखने के बाद मैंने देखा कि पहला व्यक्ति दूसरे को बुला रहा है। एक परिणाम के रूप में String.valueOf(int i) लिए अपने सभी कॉलों को सीधे Integer.toString(int i) कॉल करने से एक और कॉल शामिल है

Solutions Collecting From Web of "Integer.toString (int i) बनाम String.valueOf (int i)"

एक ही बात करने के दो अलग-अलग तरीके यह एक ऐतिहासिक कारण हो सकता है (याद नहीं रख सकता है कि कोई दूसरे से पहले आया था)।

स्ट्रिंग प्रकार में हमारे पास कई विधि मान हैं I

 static String valueOf(boolean b) static String valueOf(char c) static String valueOf(char[] data) static String valueOf(char[] data, int offset, int count) static String valueOf(double d) static String valueOf(float f) static String valueOf(int i) static String valueOf(long l) static String valueOf(Object obj) 

जैसा कि हम देख सकते हैं कि वह विधि सभी प्रकार की संख्याओं को हल करने में सक्षम है

विशिष्ट पद्धति के हर कार्यान्वयन जैसे आपने प्रस्तुत किया है: इसलिए पूर्णांक के लिए हमारे पास है

 Integer.toString(int i) 

डबल के लिए

 Double.toString(double d) 

और इसी तरह

मेरी राय में यह कुछ ऐतिहासिक चीज नहीं है, लेकिन यह एक डेवलपर के लिए उचित मूल्य की तुलना में स्ट्रिंग वर्ग से विधि valueOf का उपयोग करने के लिए और अधिक उपयोगी है, क्योंकि इससे हमारे लिए कम बदलाव होंगे

नमूना 1:

 public String doStuff(int num) { // Do something with num... return String.valueOf(num); } 

Sample2:

 public String doStuff(int num) { // Do something with num... return Integer.toString(num); } 

जैसा कि हम नमूना 2 में देखते हैं, हमें नमूना एक के विपरीत दो परिवर्तन करना पड़ता है।

मेरे निष्कर्ष में, valueOf का उपयोग करना स्ट्रिंग क्लास से विधि अधिक लचीला है और यही वजह है कि इसमें उपलब्ध है।

एक बड़ा अंतर यह है कि यदि आप toString() को एक अशक्त वस्तु में लेते हैं तो आपको एक String.valueOf() , जबकि String.valueOf() का उपयोग करके आप नल की जांच नहीं कर सकते।

स्ट्रिंग क्लास सभी प्रकार के आदिम प्रकारों और ऑब्जेक्ट प्रकारों के लिए valueOf विधियों को प्रदान करता है, इसलिए मुझे लगता है कि वे सुविधा पद्धतियां हैं जिन्हें सभी एक वर्ग के माध्यम से एक्सेस किया जा सकता है।

एनबी प्रोफाइलिंग परिणाम

औसत intToString = 5368ms, औसत स्ट्रिंग = मूल्य = 5689ms (100,000,000 आपरेशनों के लिए)

 public class StringIntTest { public static long intToString () { long startTime = System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { String j = Integer.toString(i); } long finishTime = System.currentTimeMillis(); return finishTime - startTime; } public static long stringValueOf () { long startTime = System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { String j = String.valueOf(i); } long finishTime = System.currentTimeMillis(); return finishTime - startTime; } public static void main(String[] args) { long intToStringElapsed = 0; long stringValueOfElapsed = 0; for (int i = 0; i < 10; i++) { intToStringElapsed += intToString(); stringValueOfElapsed+= stringValueOf(); } System.out.println("Average intToString = "+ (intToStringElapsed /10)); System.out.println("Average stringValueOf = " +(stringValueOfElapsed / 10)); } } 

यदि आप String क्लास के लिए स्रोत कोड देखते हैं, तो यह वास्तव में कॉल करता है Integer.toString() जब आप valueOf() कहते हैं

कहा जा रहा है, Integer.toString() एक तद तेजी से हो सकता है अगर विधि कॉल संकलन समय पर अनुकूलित नहीं कर रहे हैं (जो कि वे शायद)

जावा स्रोतों से:

 /** * Returns the string representation of the {@code int} argument. * <p> * The representation is exactly the one returned by the * {@code Integer.toString} method of one argument. * * @param i an {@code int}. * @return a string representation of the {@code int} argument. * @see java.lang.Integer#toString(int, int) */ public static String valueOf(int i) { return Integer.toString(i); } 

इसलिए वे बिल्कुल उसी परिणाम देते हैं और वास्तव में एक दूसरे को कॉल करता है। String.valueOf अधिक लचीला है यदि आप बाद में टाइप बदल सकते हैं

String.valueOf() का कार्यान्वयन जिसे आप देख रहे हैं एपीआई में निर्दिष्ट अनुबंध को पूरा करने का सबसे आसान तरीका है: "प्रतिनिधित्व वास्तव में एक तर्क के Integer.toString()Integer.toString() पद्धति से लौटा है।"

ओपी प्रश्न का उत्तर देने के लिए, यह अन्य सहायक कॉल करने के लिए बस सहायक सहायक है, और शैली के विकल्प के लिए नीचे आता है और यही वह है। मुझे लगता है कि यहां कई गलत सूचनाएं हैं और सबसे अच्छा काम जावा डेवलपर कर सकता है प्रत्येक विधि के कार्यान्वयन को देखता है, यह किसी भी आईडीई में एक या दो क्लिक दूर है आप स्पष्ट रूप से देखेंगे कि String.valueOf(int) बस आपके लिए Integer.toString(int) कॉल कर रहा है।

इसलिए, बिल्कुल शून्य अंतर है, इसमें वे दोनों एक चार बफर बनाते हैं, अंकों में अंकों के माध्यम से चलते हैं, फिर एक नए स्ट्रिंग में प्रतिलिपि बनाते हैं और इसे लौटाते हैं (इसलिए प्रत्येक एक स्ट्रिंग ऑब्जेक्ट बना रहे हैं)। केवल अंतर एक अतिरिक्त कॉल है, जो कि कंपाइलर एक कॉल के लिए वैसे भी समाप्त करता है।

तो यह ऐसा मायने रखता है जो आप कॉल करते हैं, हो सकता है कि कोड-निरंतरता के अलावा। नल के बारे में टिप्पणी के रूप में, यह एक आदिम लेता है, इसलिए यह शून्य नहीं हो सकता! यदि आप इंट होने पर आरंभ नहीं करते हैं तो आपको एक संकलन-समय त्रुटि मिल जाएगी। इसलिए इसमें कोई अंतर नहीं है कि यह कैसे नलियां संभालता है क्योंकि इस मामले में वे अस्तित्वहीन हैं।

आपको दक्षता की समस्याओं की लागत के बारे में इस अतिरिक्त कॉल के बारे में चिंता नहीं करनी चाहिए। यदि कोई भी कीमत है, तो यह न्यूनतम होगी, और चीजों की बड़ी तस्वीर में नगण्य होना चाहिए।

शायद दोनों कारणों से पठनीयता की पेशकश करने का कारण है। कई प्रकारों के सन्दर्भ में String कनवर्ट किया जा रहा है, फिर String String.valueOf(SomeType) लिए विभिन्न कॉल कुछ विभिन्न String.valueOf(SomeType) तुलना में अधिक String.valueOf(SomeType) हो सकते हैं।

विधि का प्रयोग करके, String.valueOf () आपको डेटा के बारे में चिंता करने की आवश्यकता नहीं है (चाहे वह int, लंबा, चार, चार [], बूलीयन, ऑब्जेक्ट), आप बस कॉल कर सकते हैं:

  • स्थिर स्ट्रिंग मान ()

केवल वाक्यविन्यास String.valueOf () का उपयोग कर आप जो कुछ भी पारित कर सकते हैं वह स्ट्रिंग में कनवर्ट हो जाता है और लौटा जाता है ..

अन्यथा, यदि आप Integer.toString (), Float.toString () आदि का प्रयोग करते हैं (यानी SomeType.toString ()) तो आपको पैरामीटर के डेटाटाइप को देखना होगा जो आप स्ट्रिंग में कनवर्ट करना चाहते हैं। इसलिए, ऐसे रूपांतरण के लिए String.valueOf () का उपयोग करना बेहतर है।

अगर आपके पास ऑब्जेक्ट क्लास का सरणी है जिसमें पूर्णांक, चार, फ्लोट आदि जैसे विभिन्न मान हैं, तो स्ट्रिंग.वल्यूओफ़ () विधि का उपयोग करके आप ऐसे सरणी के तत्वों को स्ट्रिंग फ़ॉर्म में आसानी से कनवर्ट कर सकते हैं। इसके विपरीत, यदि आप SomeType.toString () का उपयोग करना चाहते हैं, तो पहले आपको अपनी डेटाटाइप कक्षाएं (शायद "इंस्टेंसऑफ" ऑपरेटर का उपयोग करके) के बारे में जानने की आवश्यकता होगी और फिर केवल आप एक टाइपकास्ट के लिए आगे बढ़ सकते हैं।

String.valueOf () विधि को जब कहा जाता है पैरामीटर से मेल खाता है (चाहे उसके पूर्णांक, चार, फ्लोट आदि) और विधि ओवरलोडिंग कॉल का उपयोग करके कि "valueOf ()" विधि जिसका पैरामीटर मिलान हो जाता है, और उसके बाद उस विधि के भीतर संबंधित "toString ()" विधि के लिए एक सीधी कॉल ..

इसलिए, हम देख सकते हैं कि डेटाटाइप की जांच कैसे करें और उसके बाद "toString ()" विधि को बुलाए जाने वाले विधि को हटा दिया गया है। केवल हमें स्टिंग.वल्यूओफ़ () विधि को कॉल करना है, जो कि हम स्ट्रिंग में कनवर्ट करना चाहते हैं।

निष्कर्ष: स्ट्रिंग.वल्यूओफ़ () विधि का महत्व सिर्फ एक और कॉल की कीमत पर है

मेरा उद्घाटन मूल्य () हमेशा प्रस्तुतीकरण के लिए tostring () कहा जाता है और इसलिए primitive type valueof rpresentaion के लिए सामान्यीकृत है। और जावा डिफ़ॉल्ट रूप से डेटा प्रकार का समर्थन नहीं करता है, लेकिन यह objaect के साथ अपने कार्य को परिभाषित करता है और क्लास ने अपने सभी चीजों को क्लैस में बनाया और बनाया ऑब्जेक्ट .यहाँ पूर्णांक.स्टोस्टिंग (इंट आई) एक सीमा बनाते हैं जो कि केवल पूर्णांक के लिए रूपांतरण

पूर्णांक के लिए कोई स्ट्रिंग (5) और स्ट्रिंग .valueOf (5) के बीच कोई अंतर नहीं है;

क्योंकि String.valueOf रिटर्न:

 public static String valueOf(int i) { return Integer.toString(i); } public static String valueOf(float f) { return Float.toString(f); } 

आदि..

तार()

  1. ऑब्जेक्ट क्लास में मौजूद है, जो आमतौर पर व्युत्पन्न वर्ग में ओवरराइड होता है
  2. स्ट्रिंग () विधि को कॉल करने के लिए उचित क्लास के टाइपकार्ड आवश्यक है

का मूल्य()

  1. स्ट्रिंग कक्षा में ओवरलोडेड स्थिर विधि मौजूद है
  2. आदिम प्रकारों के साथ-साथ वस्तु प्रकारों को भी संभालती है

     Integer a = null; System.out.println(Integer.toString()) ; NUll pointer exception System.out.println(String.valueOf() ; give NULL as value 

इस लिंक को इसकी बहुत अच्छी जाँच करें http://code4reference.com/2013/06/which-one-is-better-valueof-or-tostring/