जावा स्ट्रिंग के लिए int - Integer.toString (i) बनाम नया पूर्णांक (i) .toString ()।


428

कभी-कभी जावा मुझे पहेलियाँ।
मेरे पास बनाने के लिए बहुत बड़ी मात्रा में int initializations हैं।

क्या है वास्तविक अंतर है?

  1. Integer.toString(i)
  2. new Integer(i).toString()

20
मैं बस इस्तेमाल करूंगा "" + 42, लेकिन हे, मैं हूं। फॉर्म # 2 एक मध्यवर्ती के रूप में एक नए पूर्णांक ऑब्जेक्ट (आई के अधिकांश मूल्यों के लिए) के परिणामस्वरूप होगा। यह भी अधिक टाइपिंग है।

16
@ पीएसटी: यदि मध्यवर्ती वस्तु आपके लिए एक मुद्दा है, तो "" + 42कोई बेहतर नहीं है, क्योंकि इसके लिए एक मध्यवर्ती की आवश्यकता होती है StringBuilderजो कि एक से बहुत अधिक भारी है Integer
जोआचिम सॉर

47
"" + 42 काम कर सकता है, लेकिन एक बुरा विचार है। मेरे जैसे लोग आपके कोड को देखेंगे और यह पता लगाने की कोशिश करेंगे कि खाली स्ट्रिंग को क्या हुआ था।
मिंगुय

3
मैं अनुशंसा नहीं करूंगा "" + 42क्योंकि पूर्णांकों के तार जोड़ने के मामले में आप अंत में मूल्यों को जोड़ सकते हैं और इसे साकार नहीं कर सकते हैं।
बोल्ट्जमनब्रेन 21

20
यदि आपको बहुत टाइपिंग पसंद नहीं है, तो संभवतः आपको जावा में प्रोग्रामिंग नहीं करनी चाहिए।
एडम पियर्स

जवाबों:


548

Integer.toStringकक्षा में स्थैतिक विधि को बुलाता है Integer। इसके उदाहरण की जरूरत नहीं है Integer

यदि आप कहते हैं कि new Integer(i)आप एक प्रकार की आवृत्ति बनाते हैं Integer, जो आपके पूर्णांक के मान को कूटबद्ध करता हुआ एक पूर्ण जावा ऑब्जेक्ट है। फिर आप उस toStringपर विधि कहते हैं, यह स्वयं का एक स्ट्रिंग प्रतिनिधित्व वापस करने के लिए कहें ।

यदि आप चाहते हैं कि सभी को प्रिंट करना है int, तो आप पहले का उपयोग करेंगे क्योंकि यह हल्का है, तेज है और अतिरिक्त मेमोरी का उपयोग नहीं करता है (एक तरफ दिए गए स्ट्रिंग से)।

यदि आप एक पूर्णांक मान का प्रतिनिधित्व करने वाली एक वस्तु चाहते हैं - उदाहरण के लिए एक संग्रह के अंदर रखने के लिए - आप दूसरे का उपयोग करेंगे, क्योंकि यह आपको एक पूर्ण वस्तु देता है जो सभी प्रकार की चीजें करता है जो आप नंगे के साथ नहीं कर सकते int


96

new Integer(i).toString()पहले एक (निरर्थक) आवरण वस्तु बनाता है ( iजो स्वयं एक आवरण वस्तु हो सकती है Integer)।

Integer.toString(i) पसंद किया जाता है क्योंकि यह कोई अनावश्यक वस्तु नहीं बनाता है।


43

एक अन्य विकल्प स्थिर String.valueOfविधि है।

String.valueOf(i)

यह मेरे मुकाबले थोड़ा अधिक सही लगता हैInteger.toString(i) । जब मैं टाइप करता हूं, उदाहरण के intलिए double, कोड सही रहेगा।


2
हाँ। जब तक आपको RADIX (उस स्थिति में आपको Integer.toString का उपयोग नहीं करना चाहिए)
marcolopes

14
  1. new Integer(i).toString();

    यह कथन इंटेगर की वस्तु बनाता है और फिर स्टैंगर के प्रतिनिधित्व के मूल्य का प्रतिनिधित्व वापसtoString(i) करने के लिए अपने तरीके कहता है ।

  2. Integer.toString(i);

    यह विशिष्ट int (पूर्णांक) का प्रतिनिधित्व करते हुए स्ट्रिंग ऑब्जेक्ट देता है , लेकिन यहां toString(int)एक staticविधि है।

सारांश पहले मामले में है यह ऑब्जेक्ट स्ट्रिंग प्रतिनिधित्व लौटाता है, जहां दूसरे मामले में यह पूर्णांक के स्ट्रिंग प्रतिनिधित्व को लौटाता है।


13

मैं भी अत्यधिक उपयोग की सलाह देता हूं

int integer = 42;
String string = integer + "";

सरल और प्रभावी।


38
यह निश्चित रूप से खराब रूप है, क्योंकि यह दोनों जावा भाषा के काफी सूक्ष्म हिस्से पर निर्भर करता है और यह Integer.toString (i) की तुलना में कम कुशल है। इस SO पोस्ट को
rickcnagy

यह अक्षम हो सकता है। मैं कुछ पारंपरिक विकल्पों का उपयोग करने का सुझाव देता हूं जैसे Integer.toString या String.valueOf। यहाँ देखें javadevnotes.com/java-integer-to-string-examples
JavaDev

आमतौर पर इस तरह के अनैतिक तरीके से चीजों को करना एक बुरा विचार है। अधिक स्पष्ट विकल्प जैसे Integer.toString()कि कुछ अतिरिक्त कीस्ट्रोक्स का उपयोग कर सकते हैं, लेकिन बहुत स्पष्ट हैं, जो तब महत्वपूर्ण होता है जब आप कोड को बनाए रखना चाहते हैं।
केल्विन ली

क्या यह स्वतः पूर्णांक चर की toString()विधि नहीं कहेगा?
अंकित देशपांडे

11

हालांकि मुझे फुकुओ की सिफारिश पसंद है

String.valueOf(i)

विडंबना यह है कि यह विधि वास्तव में कॉल करती है

Integer.toString(i)

इस प्रकार, उपयोग करें String.valueOf(i)यदि आपको यह पसंद है कि यह कैसे पढ़ता है और आपको मूलांक की आवश्यकता नहीं है, लेकिन यह भी जानना कि यह कम कुशल है Integer.toString(i)


4

प्रदर्शन माप के संदर्भ में, यदि आप समय प्रदर्शन पर विचार कर रहे हैं तो Integer.toString (i); महंगा है अगर आप 100 मिलियन से कम बार कॉल कर रहे हैं। और यदि यह 100 मिलियन से अधिक कॉल है तो नया Integer (10) .toString () बेहतर प्रदर्शन करेगा।

नीचे यू के माध्यम से कोड प्रदर्शन को मापने की कोशिश कर सकता है,

public static void main(String args[]) {
            int MAX_ITERATION = 10000000;
        long starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s = Integer.toString(10);
        }
        long endtime = System.currentTimeMillis();
        System.out.println("diff1: " + (endtime-starttime));

        starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s1 = new Integer(10).toString();
        }
        endtime = System.currentTimeMillis();
        System.out.println("diff2: " + (endtime-starttime));
    }

स्मृति के संदर्भ में,

new Integer (i) .toString ();

अधिक मेमोरी लेगा क्योंकि यह हर बार ऑब्जेक्ट का निर्माण करेगा, इसलिए मेमोरी विखंडन होगा।


2
मैंने इस कोड को IntelliJ IDEA में पेस्ट किया और एक चेतावनी मिली: " new Integer(10).toString() can be simplified to Integer.toString(10)"
oksayt

यह कोड मेरे लिए काम करता है। मुझे Integer.toString (10) और 525 Inteiseconds for new Integ (10) .toString ()
जेक स्टीवंस-हास


पहले वार्मअप में मदद मिलेगी, अन्यथा परिणाम मान्य नहीं हैं!
छह

यदि आप कहते हैं कि एक मामले में महंगा है, और दूसरा दूसरे मामले में बेहतर है, तो इसका मतलब है कि अन्य सभी स्थिति में बेहतर / सस्ती है।
Sgene9

2

बेहतर:

Integer.valueOf(i).toString()

9
यह बेहतर क्यों है?
एमिल

1
मुझे लगता है कि यह बेहतर है, क्योंकि @ धीरज ने बताया कि स्मृति के मामले में, "नया इंटेगर (i) .toString ();" अधिक मेमोरी लेगा क्योंकि यह केवल इंटेगर मूल्य प्राप्त करने और एक स्ट्रिंग में परिवर्तित करने के बजाय एक नई वस्तु बनाता है।
पेट्रीसिया

4
@Lucy Integer.valueOf (i) एक नया इंटीजर लौटाता है, इसलिए इसमें कोई अंतर नहीं है
InigoD

आप प्रश्न का उत्तर बिल्कुल नहीं दे रहे हैं। सवाल यह है कि ब्ला और ब्ला के बीच क्या अंतर है, न कि ब्ला के लिए बेहतर प्रतिस्थापन क्या है।
आहिट ६३४५

2

सरल तरीका सिर्फ ""पूर्णांक के साथ है:

int i = 100;

String s = "" + i;

अब स्ट्रिंग मान के रूप में sहोगा 100


1

यहाँ Integer.toStringवर्ग पद्धति में स्थिर विधि को कहते हैं। इसे कॉल करने के लिए ऑब्जेक्ट की आवश्यकता नहीं है।

यदि आप कहते हैं कि new Integer(i)आप पहले इंटेगर का एक उदाहरण बनाते हैं, जो कि एक पूर्ण जावा ऑब्जेक्ट है जो आपके int i के मूल्य को घेरता है। फिर आप उस toStringपर विधि कहते हैं, यह स्वयं का एक स्ट्रिंग प्रतिनिधित्व वापस करने के लिए कहें।


0

1।Integer.toString(i)

Integer i = new Integer(8);
    // returns a string representation of the specified integer with radix 8
 String retval = i.toString(516, 8);
System.out.println("Value = " + retval);

2।new Integer(i).toString()

 int i = 506;

String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class java.lang.String
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.