जोशुआ बलोच के प्रभावी जावा में , आइटम 5: "अनावश्यक वस्तुओं को बनाने से बचें", वह निम्नलिखित कोड उदाहरण पोस्ट करता है:
public static void main(String[] args) {
Long sum = 0L; // uses Long, not long
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}
और इसे चलाने में 43 सेकंड का समय लगता है। लॉन्ग को आदिम में ले जाना 6.8 सेकंड के लिए नीचे लाता है ... यदि यह कोई संकेत है कि हम प्राइमेटिव का उपयोग क्यों करते हैं।
देशी मूल्य समानता की कमी भी एक चिंता का विषय है ( .equals()
तुलना में काफी क्रियात्मक है ==
)
biziclop के लिए:
class Biziclop {
public static void main(String[] args) {
System.out.println(new Integer(5) == new Integer(5));
System.out.println(new Integer(500) == new Integer(500));
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
}
}
का परिणाम:
false
false
true
false
EDIT क्यों (3) रिटर्न true
और (4) वापसी करता है false
?
क्योंकि वे दो अलग-अलग वस्तुएं हैं। 256 पूर्णांक शून्य के निकटतम है [-128; 127] जेवीएम द्वारा कैश किए गए हैं, इसलिए वे उन लोगों के लिए एक ही वस्तु लौटाते हैं। उस सीमा से परे, हालांकि, वे कैश नहीं हैं, इसलिए एक नई वस्तु बनाई गई है। चीजों को और अधिक जटिल बनाने के लिए, जेएलएस मांग करता है कि कम से कम 256 फ्लाईवेट को कैश किया जाए। जेवीएम कार्यान्वयनकर्ता अपनी इच्छा के अनुसार अधिक जोड़ सकते हैं, जिसका अर्थ है कि यह एक प्रणाली पर चल सकता है जहां निकटतम 1024 कैश किए गए हैं और उनमें से सभी सही हैं ... #awward