টি এল; ডিআর
জাভা ক্যাশে থেকে পূর্ণসংখ্যা দৃষ্টান্ত boxed -128
করতে 127
। যেহেতু আপনি মানগুলির পরিবর্তে ==
অবজেক্টের রেফারেন্সগুলি তুলনা করতে ব্যবহার করছেন তাই কেবল ক্যাশেড অবজেক্টগুলি মিলবে। হয় আনবক্সড আদিম মানগুলির সাথে কাজ করুন বা আপনার বস্তুর তুলনা করতে ব্যবহার করুন ।long
.equals()
Long
দীর্ঘ (পাং উদ্দেশ্যে) সংস্করণ
লং ভেরিয়েবলের 127 এর চেয়ে বেশি মানের সাথে তুলনা করতে সমস্যা কেন? উপরের ভেরিয়েবলের ডেটা ধরণ যদি আদিম (দীর্ঘ) হয় তবে কোডটি সমস্ত মানের জন্য কাজ করে।
জাভা পূর্ণ-অবধি -128 থেকে 127 অবধি অবধি নজরে রাখে । বলেছিল:
- আপনি যদি এন লং ভেরিয়েবল মান
127
( ক্যাশেড ) সেট করেন তবে একই বস্তুর উদাহরণটি সমস্ত রেফারেন্স দ্বারা নির্দেশিত হবে। (এন ভেরিয়েবল, 1 উদাহরণ)
- আপনি যদি এন লং ভেরিয়েবলের মানটি সেট করেন
128
( ক্যাশেড নয় ), আপনার কাছে প্রতিটি রেফারেন্স দ্বারা নির্দেশিত কোনও অবজেক্টের উদাহরণ থাকবে। (এন ভেরিয়েবল, এন দৃষ্টান্ত)
এ কারণেই:
Long val1 = 127L;
Long val2 = 127L;
System.out.println(val1 == val2);
Long val3 = 128L;
Long val4 = 128L;
System.out.println(val3 == val4);
ফলাফল:
সত্য
মিথ্যা
জন্য 127L মান, মেমরি (ক্যাশে) উভয় রেফারেন্স (val1 এবং val2) একই বস্তু উদাহরণস্বরূপ বিন্দু থেকে, এটা ফেরৎ true
।
অন্যদিকে, 128 মানের জন্য, যেহেতু এটি মেমরিতে ক্যাশে হওয়ার কোনও উদাহরণ নেই, তাই বাক্সযুক্ত মানগুলির জন্য কোনও নতুন অ্যাসাইনমেন্টের জন্য একটি নতুন তৈরি করা হয়, যার ফলস্বরূপ দুটি পৃথক দৃষ্টান্ত (ভ্যাল 3 এবং ভাল 4 দ্বারা নির্দেশিত) হয় এবং ফিরে false
আসে তাদের মধ্যে তুলনা।
এটি কেবলমাত্র তাই ঘটে কারণ আপনি অপারেটরের সাথে দুটি Long
বস্তুর রেফারেন্স , long
আদিম মানগুলি তুলনা করছেন না ==
। যদি এটি এই ক্যাশে প্রক্রিয়াটির জন্য না হয়, তবে এই তুলনাগুলি সর্বদা ব্যর্থ হয়, সুতরাং এখানে আসল সমস্যাটি ==
অপারেটরের সাথে বক্সযুক্ত মানগুলির তুলনা করা ।
এই ভেরিয়েবলগুলিকে আদিম long
প্রকারে পরিবর্তন করা এটিকে রোধ করবে, তবে আপনাকে যদি আপনার কোডগুলি Long
অবজেক্টগুলি ব্যবহার করে রাখার প্রয়োজন হয় তবে আপনি নিরাপদে নিম্নলিখিত পদ্ধতির সাথে এই তুলনাগুলি তৈরি করতে পারেন:
System.out.println(val3.equals(val4)); // true
System.out.println(val3.longValue() == val4.longValue()); // true
System.out.println((long)val3 == (long)val4); // true
(যথাযথ নাল চেকিং প্রয়োজনীয়, এমনকি ingsালাইয়ের জন্যও)
আইএমও , অবজেক্টের তুলনার সাথে ডিল করার সময় সর্বদা .equals () পদ্ধতিগুলি ধরে রাখা ভাল ধারণা ।
রেফারেন্স লিঙ্ক:
.longValue()
।