এই প্রশ্নটি আসলে Java তে অপটিমাইজেশন এবং অটোমেটিক ক্যাশিং এর কারণে হয়ে থাকে।
Java তে কিছু ছোট integer মান (যেমন -128 থেকে 127 পর্যন্ত) কম্পাইলার বা JVM ক্যাশে সংরক্ষণ করে রাখে। এর মানে হচ্ছে, যখন আপনি 1 == 1 তুলনা করেন, তখন এই মান দুটি একই অবজেক্টকে রেফার করে, কারণ 1 এই রেঞ্জের মধ্যে পড়ে এবং JVM সেই মানগুলো একই সঙ্গেই রিপ্রেজেন্ট করে।
তবে, যখন আপনি 1000 == 1000 তুলনা করেন, তখন JVM দুটি আলাদা অবজেক্ট তৈরি করে এবং তারা একে অপরের সমান হলেও তাদের রেফারেন্স আলাদা থাকে। সুতরাং, এই ক্ষেত্রে অটো-বক্সিং (autoboxing) প্রয়োগ করা হলে, Integer অবজেক্ট দুটি আলাদা হয়ে যায়, এবং রেফারেন্স কম্পেয়ার হওয়ায় ফলসাফল্য আসে।
এটি যদি রেফারেন্স সমান হয়, তাহলে ফলসাফল্য আসবে, কিন্তু মান সমান হলে শুধুমাত্র .equals() ব্যবহার করলে তুলনা করতে হবে।
এভাবে:
Integer a = 1000;
Integer b = 1000;
System.out.println(a == b); // false, because they are different objects in memory
System.out.println(a.equals(b)); // true, because their values are the same
এটি মূলত Java এর অটোমেটিক ক্যাশিং এর কারণে ঘটে।
মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d