assertEquals
equals
তুলনার জন্য পদ্ধতি ব্যবহার করে । অপরেটরটি assertSame
ব্যবহার করে একটি পৃথক দাবী রয়েছে ==
।
==
স্ট্রিংগুলির সাথে কেন ব্যবহার করা উচিত নয় তা বোঝার জন্য আপনাকে বুঝতে হবে যে ==
এটি কী করে: এটি একটি পরিচয় চেক করে। অর্থাত, একই বস্তুটিa == b
দেখতে a
এবং তা b
উল্লেখ করার জন্য চেক করে । এটি ভাষায় অন্তর্নির্মিত এবং এর আচরণ বিভিন্ন শ্রেণি দ্বারা পরিবর্তন করা যায় না। পদ্ধতি, অপরপক্ষে, ক্লাস দ্বারা ওভাররাইড করা যেতে পারে। যদিও এর ডিফল্ট আচরণ ( শ্রেণিতে) অপারেটরটি ব্যবহার করে একটি পরিচয় চেক করতে হয়, তার পরিবর্তে "সমতা" পরীক্ষা করার জন্য অনেকগুলি ক্লাস এটিকে ওভাররাইড করে। এর ক্ষেত্রে , পরীক্ষা করার পরিবর্তে এবং একই বস্তুর উল্লেখ করুন,equals
Object
==
String
String
a
b
a.equals(b)
তারা যে বস্তুগুলিকে উল্লেখ করেছে তা হ'ল উভয় স্ট্রিং যা ঠিক একই অক্ষর ধারণ করে কিনা তা পরীক্ষা করে দেখুন।
সাদৃশ্য সময়: কল্পনা করুন যে প্রতিটি String
বস্তু একটি কাগজের টুকরো যা কিছু লেখা আছে। ধরা যাক, আমার কাছে দুটি ফুটে লেখা কাগজ রয়েছে যার উপরে "ফু" লেখা আছে এবং অন্যটিতে "বার" লেখা আছে। আমি যদি প্রথম দুটি টুকরো কাগজ নিয়ে থাকি এবং ==
তাদের তুলনা করতে ব্যবহার করি তবে এটি ফিরে আসবে false
কারণ এটি মূলত জিজ্ঞাসা করছে "এগুলি কি একই কাগজের টুকরো?" এমনকি কাগজে কী লেখা আছে তাও দেখার দরকার নেই। আমি এটিকে দুটি টুকরো কাগজ দিচ্ছি (বরং একবারে দু'বারের তুলনায়) এর অর্থ এটি ফিরে আসবে false
। তবে আমি যদি ব্যবহার করি equals
তবে equals
পদ্ধতিটি দুটি টুকরো কাগজ পড়বে এবং দেখবে যে তারা একই জিনিস ("ফু") বলে, এবং তাই এটি ফিরে আসবে true
।
স্ট্রিংগুলির সাথে বিভ্রান্ত হয়ে ওঠার বিভাটিটি হ'ল জাভাটির "ইন্টার্নিং" স্ট্রিংসের ধারণা রয়েছে এবং এটি (কার্যকরভাবে) আপনার কোডের যে কোনও স্ট্রিং লিটারেলগুলিতে স্বয়ংক্রিয়ভাবে সম্পাদিত হয়। এর অর্থ হ'ল যদি আপনার কোডে দুটি সমতুল্য স্ট্রিং লিটারেল থাকে (যদিও তারা বিভিন্ন শ্রেণিতে থাকে) তারা উভয়ই একই String
বস্তুকে বোঝায় । এটি ==
অপারেটরটিকে true
প্রত্যাশার চেয়ে আরও বেশি বার করে তোলে ।