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()
, অন্যথায় সমস্ত বেট বন্ধ আছে।