मेरा उद्देश्य मेरा एप्लिकेशन कोड अनुकूलित करना है। मेरे कोड इस तरह दिखता है:विधि अक्षम नए इंटीजर (int) कन्स्ट्रक्टर का आह्वान करता है; इसके बजाय Integer.valueOf (int) का उपयोग करें
int a = 10;
Map<String , Integer> myMap = new TreeMap<>();
myMap.put("first" , new Integer(a)); //[FindBugs] Method com.abc.xyz.Test.main(String[]) invokes inefficient new Integer(int) constructor; use Integer.valueOf(int) instead
जब मैं Netbeans में FindBugs द्वारा स्थिर विश्लेषण किया था, यह पता चलता है की तरह "विधि एक चेतावनी/बग अक्षम नई पूर्णांक (int) निर्माता invokes है कि वहाँ; Integer.valueOf का उपयोग करें (int) इसके बजाय "।
मैं नई पूर्णांक (int) बनाम Integer.valueOf (int) के बीच अंतर पता है।
एक अतिरिक्त वस्तु बनाता है और दूसरा नहीं। इसके अलावा कोई कैशिंग और अन्य कैश नहीं करता है।
तो मैं इस तरह मेरे को संशोधित किया है ...
m.put("first" , Integer.valueOf(a)); // Unnecessary boxing to Integer
लेकिन फिर भी चेतावनी "पूर्णांक को अनावश्यक मुक्केबाजी" (संपादक द्वारा FindBugs द्वारा नहीं) देता है।
तो, मैं इसे फिर से इस तरह के रूप में बदल दिया है ....
m.put("first" , a); //No warning at all...
जो अंत में बिल्कुल देता है कोई चेतावनी।
मेरे प्रश्न:
1.) इस link सुझाव है कि आंतरिक रूप से (संकलक द्वारा) m.put ("प्रथम", एक);m.put में परिवर्तित हो रहा है ("पहला", Integer.valueOf (ए));
(उस उदाहरण पर, एक सूची-ऐरेलिस्ट है और यहां हमारे पास मानचित्र-ट्रीमैप है ... एफवाईआई)। फिर संपादक क्यों चेतावनी देता है? और मुझे क्या करना चाहिए? अनुकूलित तरीका क्या है?
2.) यदि मानचित्र के बजाय, अगर वहाँ HashTable तो जैसे किसी भी डेटा संरचना है ???
3.) संपादक अनावश्यक मुक्केबाजी को क्यों देता है।
4.) m.put ("पहला", ए) काम करता है? क्योंकि मैं आदिम चर पास कर रहा हूं और मानचित्र के पुट() केवल ऑब्जेक्ट स्वीकार कर रहा हूं। तो ऑटो मुक्केबाजी की वजह से है?
हाँ, यह स्वत: मुक्केबाजी की वजह से है देखें। –
OK.thanks ... तो अनुकूलन के लिए अच्छा तरीका क्या है? आखरी?? –
मुझे नहीं लगता कि आप इसे अनुकूलित कर सकते हैं, ऑटो मुक्केबाजी आपके लिए एक ही काम करता है, इसलिए आपको स्पष्ट रूप से 'valueOf (a) 'की आवश्यकता नहीं है। –