আপনি যখন জাভাতে একটি সংখ্যাটি আক্ষরিক সংকলন করেন এবং সংকলকটির দ্বারা এটি একটি পূর্ণসংখ্যার (মূলধন I) নির্ধারিত হয়:
Integer b2 =Integer.valueOf(127)
আপনি অটোবক্সিং ব্যবহার করার সময় কোডের এই লাইনটিও উত্পন্ন হয়।
valueOf এমনটি কার্যকর করা হয় যে নির্দিষ্ট সংখ্যাগুলি "পুল করা" হয় এবং এটি 128 এর চেয়ে কম মানের জন্য একই উদাহরণ দেয় returns
জাভা 1.6 উত্স কোড থেকে, লাইন 621:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
মান highকরতে পারেন অন্য মান করার জন্য কনফিগার করা, সিস্টেম সম্পত্তি সঙ্গে।
-Djava.lang.Integer.IntegerCache.high = 999
যদি আপনি সেই সিস্টেম সম্পত্তি দিয়ে আপনার প্রোগ্রামটি চালান, তবে এটি সত্য হয়ে যাবে!
সুস্পষ্ট উপসংহার: দু'টি রেফারেন্স অভিন্ন হিসাবে কখনও নির্ভর করবেন না, সর্বদা তাদেরকে .equals()পদ্ধতির সাথে তুলনা করুন ।
সুতরাং b2.equals(b3)বি 2, বি 3 এর সমস্ত যৌক্তিক সমান মানগুলির জন্য সত্য মুদ্রণ করা হবে।
নোট করুন যে Integerকার্য সম্পাদনের কারণে ক্যাশে নেই, বরং জেএলএস অনুসারে, বিভাগ 5.1.7 ; বস্তুর পরিচয় অবশ্যই -128 থেকে 127 সহ মানের জন্য দেওয়া উচিত।
পূর্ণসংখ্যা # মানওফ (ইনট্রি) এছাড়াও এই আচরণের দলিল করে:
এই পদ্ধতিটি প্রায়শই অনুরোধ করা মানগুলিকে ক্যাশে করে উল্লেখযোগ্যভাবে আরও ভাল জায়গা এবং সময় সম্পাদন করে। এই পদ্ধতিটি সর্বদা অন্তর্ভুক্ত সহ -128 থেকে 127 সীমাতে মানগুলিকে ক্যাশে করবে এবং এই ব্যাপ্তির বাইরের অন্যান্য মানকে ক্যাশে করতে পারে।