Integerবর্গ যে দোকানে 256 বিশেষ একটি স্ট্যাটিক ক্যাশে আছে, Integerমনের মধ্যে -128 এবং 127 যে সঙ্গে মাঝে প্রত্যেক মানের জন্য এক, এই তিনটি মধ্যে পার্থক্য বিবেচনা - বস্তু।
new Integer(123);
এটি (স্পষ্টতই) একেবারে নতুন Integerঅবজেক্ট তৈরি করে।
Integer.parseInt("123");
intপার্স করার পরে এটি একটি আদিম মান দেয় String।
Integer.valueOf("123");
এটি অন্যদের চেয়ে জটিল। এটি পার্স করে শুরু হয় String। তারপরে, মানটি -128 এবং 127 এর মধ্যে হয় তবে এটি স্থিতি ক্যাশে থেকে সংশ্লিষ্ট বস্তুটি প্রদান করে। মানটি যদি এই ব্যাপ্তির বাইরে থাকে, তবে এটি new Integer()মানটিকে অনুরোধ করে এবং পাস করে, যাতে আপনি একটি নতুন অবজেক্ট পান।
এখন, প্রশ্নের তিনটি ভাবটি বিবেচনা করুন।
Integer.valueOf("127")==Integer.valueOf("127");
এটি সত্য প্রত্যাবর্তন করে, কারণ Integerযার মান 127 স্ট্যাটিক ক্যাশে থেকে দু'বার পুনরুদ্ধার করা হয়েছে এবং নিজের তুলনায়। কেবলমাত্র একটি Integerজিনিস জড়িত রয়েছে, তাই এটি ফিরে আসে true।
Integer.valueOf("128")==Integer.valueOf("128");
এটি ফিরে আসে false, কারণ 128 স্থির ক্যাশে নেই। সুতরাং Integerসাম্যের প্রতিটি পক্ষের জন্য একটি নতুন তৈরি করা হয়। যেহেতু দুটি পৃথক পৃথক Integerবস্তু রয়েছে এবং উভয় পক্ষই হুবহু একই ==বস্তু হিসাবে কেবল অবজেক্টের জন্য ফেরত দেয় true, এটি হতে চলেছে false।
Integer.parseInt("128")==Integer.valueOf("128");
এটি ডানদিকে intএকটি নতুন নির্মিত Integerবস্তুর সাথে বামদিকে আদিম মান 128 এর সাথে তুলনা করছে । কিন্তু কারণ এটি একটি তুলনা করতে অর্থে দেখা যায় না intএকটি থেকে Integer, জাভা স্বয়ংক্রিয় unbox হবে Integerতুলনা করছেন আগে; সুতরাং আপনি একটি intসঙ্গে একটি তুলনা শেষ int। যেহেতু আদিম 128 নিজের সমান, তাই এটি ফিরে আসে true।
.equals(), অন্যথায় সমস্ত বেট বন্ধ আছে।