সংক্ষিপ্ত উত্তর:
সমতা জটিল।
বিস্তারিত উত্তর:
প্রিমিটিভ টাইপগুলি বেসটি ওভাররাইড করে object.Equals(object)
এবং বাক্স object
একই ধরণের এবং মানের হয় তবে সত্য হয় return (দ্রষ্টব্য যে এটি ক্ষয়যোগ্য প্রকারের জন্যও কাজ করবে; নন-নাল nallable প্রকারগুলি অন্তর্নিহিত ধরণের উদাহরণ হিসাবে সর্বদা বাক্স থাকে))
যেহেতু newAge
একটি short
, Equals(object)
তাই আপনি যদি একই মানের সাথে একটি বাক্স সংক্ষিপ্ত পাস করেন তবে এর পদ্ধতিটি কেবল সত্যটি প্রত্যাবর্তন করে । আপনি একটি বাক্সযুক্ত উত্তীর্ণ int
, তাই এটি মিথ্যা ফিরে।
বিপরীতে, ==
অপারেটর দুটি int
গুলি (বা short
গুলি বা long
গুলি) গ্রহণ হিসাবে সংজ্ঞায়িত করা হয় ।
যখন আপনি এটি একটি কল int
এবং short
, কম্পাইলার পরোক্ষভাবে রূপান্তর করবে short
করার int
এবং তার ফলে তুলনা int
মান গুলি।
এটি কাজ করার অন্যান্য উপায়
আদিম ধরণেরগুলির নিজস্ব Equals()
পদ্ধতি রয়েছে যা একই ধরণের গ্রহণ করে।
আপনি যদি লিখেন age.Equals(newAge)
, সংকলক int.Equals(int)
সেরা ওভারলোড হিসাবে নির্বাচন করবে এবং স্পষ্টত রূপান্তরিত short
করবে int
। এটি তখন ফিরে আসবে true
, যেহেতু এই পদ্ধতিটি কেবলমাত্র সরাসরিগুলির সাথে তুলনা করে int
।
short
এছাড়াও একটি short.Equals(short)
পদ্ধতি আছে, কিন্তু int
স্পষ্টভাবে রূপান্তর করা যায় না short
, তাই আপনি এটি কল করছেন না।
আপনি একটি কাস্ট দিয়ে এই পদ্ধতিটি কল করতে বাধ্য করতে পারেন:
Console.WriteLine(newAge.Equals((short)age)); // true
short.Equals(short)
এটি বক্সিং ছাড়াই সরাসরি কল করবে । যদি age
32767 এর চেয়ে বড় হয় তবে এটি একটি ওভারফ্লো ব্যতিক্রম ছুঁড়ে দেবে।
আপনি short.Equals(object)
ওভারলোডকেও কল করতে পারেন , তবে স্পষ্টভাবে একটি বক্সযুক্ত বস্তুটি পাস করুন যাতে এটি একই ধরণের হয়:
Console.WriteLine(newAge.Equals((object)(short)age)); // true
পূর্ববর্তী বিকল্পের মতো, এটি কোনও ক্ষেত্রে ফিট না হলে এটি একটি ওভারফ্লো ফেলে দেবে short
। পূর্ববর্তী সমাধানের বিপরীতে, এটি short
সময় এবং স্মৃতি নষ্ট করে একটি বস্তুকে বক্স করবে ।
সোর্স কোড:
Equals()
আসল উত্স কোড থেকে দুটি পদ্ধতি এখানে রয়েছে :
public override bool Equals(Object obj) {
if (!(obj is Int16)) {
return false;
}
return m_value == ((Int16)obj).m_value;
}
public bool Equals(Int16 obj)
{
return m_value == obj;
}
আরও পড়া:
এরিক লিপার্ট দেখুন ।