"যেহেতু বিকাশকারীরা এমন ক্লাস নিয়ে আসতে পারে যা সংখ্যাগুলি বর্ণনা করে, তাই তারা বাস্তব বিকাশকারীদের মতো সৃজনশীল হওয়ার সিদ্ধান্ত নিয়েছে।"

"প্রথম, তারা একটি বিমূর্ত সংখ্যা শ্রেণী নিয়ে এসেছিল, যেখান থেকে বাইট, শর্ট, পূর্ণসংখ্যা, লং, ফ্লোট এবং ডাবল পাওয়া যায়। এটিতে এমন পদ্ধতি রয়েছে যা সংখ্যাকে অন্যান্য সংখ্যায় রূপান্তর করতে সাহায্য করে।"

সংখ্যা শ্রেণীর পদ্ধতি
1
int intValue()
2
long longValue()
3
float floatValue()
4
double doubleValue()
5
byte byteValue()
6
short shortValue()

"ঠিক আছে। সর্বোপরি, আপনি এটি লিখতে পারবেন না:"

Long x = 100000;
Integer y = (Integer) x;

"হ্যাঁ, এই প্রকারগুলি আদিম নয়। তাই আমরা সংখ্যা শ্রেণীর পদ্ধতিগুলি ব্যবহার করি:"

Long x = 100000;
Integer y = x.intValue();

"কিন্তু এখনও কয়েকটি বিষয় বিবেচনা করার আছে। যেহেতু পূর্ণসংখ্যা একটি int নয়, তাই পূর্ণসংখ্যা বস্তুকে ক্লাসিক «==» অপারেটরের সাথে তুলনা করা যায় না।"

আদিম প্রকারের তুলনা
int x = 500;
int y = 500;
x == y; //true
অ-আদিম ধরনের তুলনা
Integer x = 500;
Integer y = 500;
x == y; //false
x.equals(y); //true

"ঠিক। একরকম আমি এখনই ভাবিনি।"

"কিন্তু আরো আছে।"

"আপনি আমার সার্কিট শর্ট করছেন! আর কি আছে?"

"যখন আমরা একটি পূর্ণসংখ্যা ভেরিয়েবলে একটি int মান নির্ধারণ করি, তখন Integer.valueOf পদ্ধতিটিকে বলা হয়:"

কোড আসলেই কি হয়
Integer x = 5;
Integer x = Integer.valueOf(5);

"হ্যাঁ, আমি ইতিমধ্যে উপরের উদাহরণ থেকে এটি বুঝতে পেরেছি।"

"কিন্তু, valueOf ফাংশন সবসময় একটি নতুন পূর্ণসংখ্যা বস্তু তৈরি করে না।"

"ওহ, আপনি কি বলতে চাচ্ছেন «সর্বদা নয়»?"

"এটি -128 থেকে 127 পর্যন্ত মান ক্যাশে করে।"

কোড আসলেই কি হয় বর্ণনা
Integer x = 300;
Integer y = 300;
Integer z = 300;
Integer x = Integer.valueOf(300);
Integer y = Integer.valueOf(300);
Integer z = Integer.valueOf(300);
পরিবর্তনশীল x, y, এবং z এ বিভিন্ন বস্তুর উল্লেখ থাকে
Integer x = 100;
Integer y = 100;
Integer z = 100;
Integer x = Integer.valueOf(100);
Integer y = Integer.valueOf(100);
Integer z = Integer.valueOf(100);
x, y, এবং z ভেরিয়েবলে একই বস্তুর উল্লেখ থাকে।
Integer x = new Integer(10)
Integer y = new Integer(10)
Integer z = 10;
Integer t = 10;
Integer x = new Integer(10)
Integer y = new Integer(10)
Integer z = Integer.valueOf(10);
Integer t = Integer.valueOf(10);
ভেরিয়েবল z এবং t একই বস্তুর উল্লেখ ধারণ করে।

"অন্য কথায়, পরিস্থিতি হল এই:"

1)  যদি আমরা "নতুন পূর্ণসংখ্যা()" লিখি, তাহলে আমরা একটি নতুন বস্তু পাব নিশ্চিত।

2)  যদি আমরা Integer.valueOf(), স্পষ্টভাবে বা অটোবক্সিংয়ের মাধ্যমে কল করি, তাহলে পদ্ধতিটি একটি নতুন অবজেক্ট বা ক্যাশে করা অবজেক্ট ফেরত দিতে পারে যদি নম্বর আর্গুমেন্ট -128 থেকে 127-এর মধ্যে থাকে।

"ক্যাশে থেকে একটি বস্তু ফেরত দেওয়ার পদ্ধতি সম্পর্কে এত ভয়ানক কি?"

"কিছু মনে করবেন না। আপনাকে কেবল জানতে হবে যে কখনও কখনও, যখন আপনি এটি আশা করছেন না, তখন বস্তুগুলি সমান হতে পারে। সমতার সাথে সবকিছুই জটিল। যদি আমরা একটি আদিমকে একটি অ-আদিমের সাথে তুলনা করি, তাহলে তাদের আদিম হিসাবে তুলনা করা হয়:"

তুলনা সমস্যা
int x = 300;
Integer y = 300;
Integer z = 300;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //false (comparison based on references)
একটি এমনকি আরো আকর্ষণীয় উদাহরণ. ক্যাশে এখানে ছবিটি প্রবেশ করে
int x = 100;
Integer y = 100;
Integer z = 100;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //true (comparison based on references; they point to the same object)
কিন্তু ক্যাশে এখানে জড়িত নয়
int x = 100;
Integer y = new Integer(100);
Integer z = 100;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //false (comparison based on references; they point to different objects)

"দারুণ... আর আমি কিভাবে এই সব মুখস্থ করব?"

"আপনাকে এটি মুখস্থ করার দরকার নেই। আপনাকে কেবল বুঝতে হবে যে এটি কীভাবে সংগঠিত হয় এবং যখন একটি আদিম এবং তার অ-আদিম প্রতিরূপ খেলায় আসে তখন আসলে কী ঘটে।"

"আমি আপনাকে পূর্ণসংখ্যা শ্রেণীর পদ্ধতিগুলি দেখার পরামর্শ দিচ্ছি। এতে বেশ কয়েকটি ভাল এবং দরকারী পদ্ধতি রয়েছে। এমনকি আপনি প্রায়শই তাদের মধ্যে একটি ব্যবহার করেছেন।"

"হ্যাঁ, মনে আছে। Integer.parseInt();"