তুলনা করুন () বনাম সমান ()


118

Stringজাভা এর সমতার জন্য পরীক্ষা করার সময় আমি সর্বদা ব্যবহার করি equals()কারণ এটি আমার কাছে এটি সবচেয়ে প্রাকৃতিক পদ্ধতি বলে মনে হয়। সর্বোপরি, এর নামটি ইতিমধ্যে জানিয়েছে যে এটি করার উদ্দেশ্যে। যাইহোক, আমার এক সহকর্মী আমাকে সম্প্রতি compareTo() == 0পরিবর্তে ব্যবহার করতে শেখানো হয়েছে বলেছিলেন equals()। এটি অপ্রাকৃত অনুভব করে (যেমন compareTo()অর্ডার সরবরাহ করার জন্য এবং সাম্যের জন্য তুলনা না করার জন্য) এবং কিছুটা বিপজ্জনক (কারণ compareTo() == 0এটি সমস্ত ক্ষেত্রে সাম্যকে বোঝায় না যদিও আমি জানি যে এটি Stringআমার পক্ষে হয়)।

তিনি কেন তিনি ব্যবহার করতে শেখানো হয় জানেন না compareTo()পরিবর্তে equals()জন্য Stringএর, এবং আমি তার সাথে সাথে কেন খুঁজে পাইনি। এটি কি সত্যিই ব্যক্তিগত স্বাদের বিষয়, বা কোনও পদ্ধতির কোনও বাস্তব কারণ আছে?


9
মাইক্রো-অপ্টিমাইজেশনের স্তরে কঠোরভাবে কথা বলা, যা আমাদের কখনই অকাল কথা বলা উচিত নয়, .equalsIgnoreCase()এটি যথাযথ হলে দ্রুততম তুলনা হয়, অন্যথায় .equals()আপনি যা চান তা এটি।

1
এটি একটি পুরানো প্রশ্ন, তবে এটিতে একটি ন্যাগেট রয়েছে যা আমি হাইলাইট করতে চেয়েছিলাম: " compareTo() == 0অগত্যা সব ক্ষেত্রেই সাম্য বোঝানো হয় না"। এটা একদম সঠিক! জাভা এপিআই নির্দিষ্টকরণে "সমান সাথে সামঞ্জস্যপূর্ণ" শব্দটির অর্থ হ'ল উদাহরণস্বরূপ তুলনামূলক শ্রেণীর স্পেসিফিকেশন। উদাহরণস্বরূপ, স্ট্রিংয়ের তুলনা পদ্ধতি সমানগুলির সাথে সামঞ্জস্যপূর্ণ, তবে বিগডিসিমালের তুলনা পদ্ধতি সমানগুলির সাথে সামঞ্জস্যপূর্ণ নয়
স্টুয়ার্ট

উত্তর:


104

একটি পার্থক্য হ'ল নালপয়েন্টারএক্সসেপশন নিক্ষেপ করে "foo".equals((String)null)মিথ্যা ফেরত আসে "foo".compareTo((String)null) == 0। সুতরাং এগুলি স্ট্রিংয়ের জন্য সর্বদা বিনিময়যোগ্য হয় না।


6
আমি মনে করি আপনারও এটি উল্লেখ করা উচিত। সমান হ্যাশকোড গণনা। দুটি পৃথক স্ট্রিংয়ের হ্যাশকোড যদিও বিরল, একই হতে পারে। তুলনামূলকটি () ব্যবহার করার সময় এটি স্ট্রিং চরিত্রটি অক্ষর দ্বারা পরীক্ষা করে। সুতরাং এক্ষেত্রে দুটি স্ট্রিং সত্যই ফিরে আসবে যদি কেবল তাদের আসল বিষয়বস্তু সমান হয়।
আশ্বিন

30
আপনি কেন মনে করেন যে হ্যাশকোডের সমান হয়? আপনি দেখতে পাচ্ছেন যে এটি কেস নয়: docjar.com/html/api/java/lang/String.java.html (লাইন 1013)।
ওয়েক্সওয়েং

3
তুমি ঠিক. আমি ভেবেছিলাম যে সমান এবং হ্যাশকোড একসাথে চলে যায় (উভয়ের ক্ষেত্রে একই হ্যাশ কোড রয়েছে কিনা তা সমান পরীক্ষা করে)। তাহলে আপনি যদি সেগুলির কোনও একটিকে ওভাররাইড করার সিদ্ধান্ত নেন তবে কেন এই দুটি পদ্ধতিই ওভাররাইড করা প্রয়োজন।
আশ্বিন

3
কারণ যদি বর্গ HashMap, HashSet এবং hashtable সহ হ্যাশ ভিত্তিক সংগ্রহ, ব্যবহার বর্গ অভ্যস্ত ফাংশন সঠিকভাবে যখন আমরা সমান ওভাররাইড হ্যাশকোড ওভাররাইড করা প্রয়োজন
varunthacker

4
@ আশ্বিন এটি প্রয়োজনীয় কারণ যদি .মানুষগুলি সত্যটি ফিরে আসে তবে হ্যাশকোডগুলিও সমান হওয়া উচিত be তবে হ্যাশকোডগুলি সমান হলে এটি বোঝায় না e সমাপ্তিগুলি সত্য হওয়া উচিত
অ্যালান

33

প্রধান দুটি পার্থক্য হ'ল:

  1. equalsপ্যারামিটার হিসাবে যে কোনও অবজেক্ট গ্রহণ করবে, তবে compareToকেবল স্ট্রিংস নেবে।
  2. equalsকেবল তারা আপনাকে সমান বা না তা আপনাকে জানায় তবে compareToস্ট্রিংগুলি কীভাবে অভিধান সংক্রান্ত তুলনা করে তার তথ্য দেয়।

আমি স্ট্রিং ক্লাস কোডটি দেখেছি এবং তুলনা টো এবং সমান মধ্যে থাকা অ্যালগরিদম মূলত একইরকম দেখাচ্ছে। আমি বিশ্বাস করি যে তাঁর মতামতটি স্বাদের বিষয় ছিল, এবং আমি আপনার সাথে একমত - আপনার স্ট্রিংয়ের সাম্যতা যদি আপনাকে জানার দরকার হয় তবে কোনটি অভিধানে প্রথমে আসে না, তবে আমি ব্যবহার করব equals


26

সমতার জন্য তুলনা করার সময় আপনার ব্যবহার করা উচিত equals(), কারণ এটি আপনার উদ্দেশ্যকে স্পষ্টভাবে প্রকাশ করে।

compareTo()অতিরিক্ত অপূর্ণতা রয়েছে যা এটি কেবলমাত্র সেই বস্তুগুলিতে কাজ করে যা Comparableইন্টারফেস প্রয়োগ করে ।

এটি কেবল স্ট্রিংসের জন্যই নয়, সাধারণভাবে প্রযোজ্য।


18

compareToস্ট্রিংগুলির দৈর্ঘ্য পৃথক থাকলে আরও কাজ করতে পারে। equalsকেবলমাত্র মিথ্যা প্রত্যাবর্তন করতে পারে, যখন compareToবাছাইয়ের ক্রম খুঁজতে সর্বদা যথেষ্ট অক্ষর পরীক্ষা করতে হবে।


10

compareTo()কেবল স্ট্রিংসগুলিতেই প্রয়োগ হয় না তবে অন্য যে কোনও অবজেক্টেও প্রযোজ্য কারণ compareTo<T>একটি জেনেরিক যুক্তি লাগে T। স্ট্রিং হল এমন একটি ক্লাস যা ইন্টারফেসটি প্রয়োগ করে compareTo()পদ্ধতিটি কার্যকর করেছে Comparable(তুলনাযোগ্য ইন্টারফেসের জন্য তুলনামূলক) একটি পদ্ধতি। সুতরাং যে কোনও শ্রেণীর তুলনামূলক ইন্টারফেস বাস্তবায়নের জন্য নিখরচায়।

কিন্তু compareTo()বস্তুর ক্রম দেয় , আরোহী বস্তু বাছাই বা আদেশ যখন সাজানো সাধারণত ব্যবহৃত equals()শুধুমাত্র সমতা সম্পর্কে কথা বলতে হবে এবং বলে কিনা তারা সমান বা হয় না।


10

স্ট্রিং প্রসঙ্গে:
তুলনা করুন: দুটি স্ট্রিংকে অভিধানের সাথে তুলনা করুন।
সমান: এই স্ট্রিংটিকে নির্দিষ্ট বস্তুর সাথে তুলনা করে।

CompTTo তাদের অক্ষর দ্বারা দুটি স্ট্রিং তুলনা করে (একই সূচীতে) এবং সেই অনুযায়ী একটি পূর্ণসংখ্যা (ধনাত্মক বা negativeণাত্মক) প্রদান করে।

String s1 = "ab";
String s2 = "ab";
String s3 = "qb";
s1.compareTo(s2); // is 0
s1.compareTo(s3); // is -16
s3.compareTo(s1); // is 16

7

ইকুয়াল () আরও বেশি দক্ষ হতে পারে তারপরে তুলনা করুন ()

তুলনা এবং সমানগুলির মধ্যে একটি খুব গুরুত্বপূর্ণ পার্থক্য:

"myString".compareTo(null);  //Throws java.lang.NullPointerException
"myString".equals(null);     //Returns false

সমান () দুটি বস্তু একই বা না এবং দুটি বুলিয়ান দেয় কিনা তা পরীক্ষা করে।

তুলনা করা() (ইন্টারফেস তুলনামূলক থেকে) একটি পূর্ণসংখ্যা ফেরত দেয়। এটি দুটি বস্তুর মধ্যে কোনটি "চেয়ে কম", "সমান" বা অন্যটির চেয়ে "বৃহত্তর" তা পরীক্ষা করে। সমস্ত বস্তুকে যুক্তিযুক্তভাবে অর্ডার করা যায় না, সুতরাং তুলনা করার পদ্ধতি () পদ্ধতিটি সর্বদা অর্থযুক্ত হয় না।

নোট করুন যে সমান () বস্তুর মধ্যে ক্রম সংজ্ঞায়িত করে না, যা তুলনা করুন () করে।

এখন আমি আপনাকে উভয় পদ্ধতির উত্স কোডটি পর্যালোচনা করতে পরামর্শ দিচ্ছি যে উপসংহার তুলনায় সমান সমান পছন্দনীয় যা কিছু গণিতের গণনা জড়িত।


5

দেখা যাচ্ছে যে দুটি পদ্ধতিই একই কাজ করে, তবে তুলনামূলক পদ্ধতি () কোনও স্ট্রিং নেয়, কোনও বস্তু নয় এবং স্বাভাবিক সমান () পদ্ধতির উপরে কিছু অতিরিক্ত কার্যকারিতা যুক্ত করে। আপনি যে সমস্ত বিষয়ে যত্নশীল তা যদি সমতা হয় তবে সমান () পদ্ধতিটি সর্বোত্তম পছন্দ, কেবল কারণ এটি পরবর্তী কোডারটিকে আরও বেশি বোঝায় যা আপনার কোডটি দেখে। দুটি বিশাল ফাংশনের মধ্যে সময়ের পার্থক্যের বিষয়টি বিবেচনা করা উচিত না যতক্ষণ না আপনি কিছু বিশাল পরিমাণ আইটেমগুলি লুপ করেন। যখন আপনি কোনও সংগ্রহে স্ট্রিংয়ের ক্রমটি জানতে বা যখন অক্ষরের একই ক্রম দিয়ে শুরু হওয়া স্ট্রিংগুলির মধ্যে দৈর্ঘ্যের পার্থক্যটি জানতে হবে তখন তুলনা টো () সত্যিই কার্যকর।

সূত্র: http://java.sun.com/javase/6/docs/api/java/lang/String.html


5

equals() ওপির ক্ষেত্রে পছন্দ করার পদ্ধতি হওয়া উচিত।

বাস্তবায়ন এ খুঁজছি equals()এবং compareTo()মধ্যে java.lang.String grepcode উপর , আমরা সহজেই দেখতে পারেন সমান উত্তম যদি আমরা মাত্র দুই স্ট্রিং সমতা সঙ্গে সংশ্লিষ্ট করা হয়:

equals():

1012   পাবলিক  বুলিয়ান সমান ( অবজেক্ট আনোবজেক্ট) { 
1013 যদি ( এটি == anObject) {
1014 সত্য ফিরে আসে ; 1015 } 1016 যদি (anObject instanceof স্ট্রিং ) { 1017 স্ট্রিং anotherString = ( স্ট্রিং ) anObject; 1018 int n = গণনা; 1019 if (n == anotherString.count) { 1020 চর ভি 1 [] = মান; 1021 চর ভি 2 [] = আরেকটি স্ট্রিং.ভ্যালু; 1022







ইনটi = অফসেট;
1023 int j = anotherString.offset;
1024 সময় (n--! = 0) {
1025 যদি (ভি 1 [আমি ++]! = ভি 2 [জে ++])
1026 মিথ্যা ফেরত দেয় ;
1027 }
1028 সত্য প্রত্যাবর্তন ; 1029 } 1030 } 1031 মিথ্যা ফেরত ; 1032 }




এবং compareTo():

1174   প্রকাশ্য  int- এ compareTo ( স্ট্রিং anotherString) { 
1175 int- এ len1 = গণনা; সি 1 = ভি 1 [কে]; 1188 চর সি 2 = ভি 2 [কে]; 1189 যদি (সি 1! = সি 2) { 1190
1176 int len2 = anotherString.count;
1177 int n = গণিত। মিনিট (লেন 1, লেন 2);
1178 চর ভি 1 [] = মান;
1179 চর ভি 2 [] = আরেকটি স্ট্রিং.ভ্যালু;
1180 int i = অফসেট;
1181 int j = anotherString.offset;
1183 যদি (i == j) {
1184 ইনট কে = i;
1185 ইনট লিমি = এন + আই;
1186 যখন (কে <লিম)
1187 চর রিটার্ন সি 1 - সি 2; 1191 } 1192 কে ++; 1193 } 1194 } অন্য { 1195 যখন (n-- = 0!) { 1196 গৃহস্থালির কাজ C1 = v1 এ [আমি ++,]; 1197 চর সি 2 = ভি 2 [জে ++]; 1198 যদি (সি 1! = সি 2) { 1199 রিটার্ন সি 1 - সি 2; 1200 } 1201 } 1202 }















1203 রিটার্ন লেন 1 - লেন 2;
1204 }

যখন কোনও একটি স্ট্রিং অন্যটির উপসর্গ হয় তখন এর কর্মক্ষমতা compareTo()আরও খারাপ হয় কারণ এর জন্য এখনও অভিধানিক ক্রম নির্ধারণ করা দরকার যখন আর equals()কোনও চিন্তা করবেন না এবং তাত্ক্ষণিকভাবে মিথ্যা ফিরে আসবে না।

আমার মতে, এই দুটি যেমন তাদের উদ্দেশ্য ছিল তেমন ব্যবহার করা উচিত:

  • equals() সমতা পরীক্ষা করার জন্য, এবং
  • compareTo() শব্দের ক্রম অনুসন্ধান করুন।

3

সমান () দুটি স্ট্রিং সমান কিনা তা পরীক্ষা করে t এটি বুলিয়ান মান দেয়। CompTTo () স্ট্রিং অবজেক্টটি অন্য স্ট্রিং অবজেক্টের সমান, বৃহত্তর বা ছোট কিনা তা যাচাই করে:

EQ:

String a = "Amit";
String b = "Sumit";
String c = new String("Amit");
System.out.println(a.equals(c));//true
System.out.println(a.compareTo(c)); //0
System.out.println(a.compareTo(b)); //1

2

জাভাতে তুলনা করার সময় ওভাররাইড করার সময় আপনার কয়েকটি বিষয় মনে রাখতে হবে যেমন তুলনাটি সমান সাথে সামঞ্জস্যপূর্ণ হতে হবে এবং সংখ্যার ক্ষেত্রগুলির তুলনা করার জন্য বিয়োগগুলি ব্যবহার করা উচিত নয় কারণ তারা উপচে পড়তে পারে। চেকজাভাতে তুলনামূলককে ওভাররাইড করার সময় বিশদগুলির জন্য মনে রাখার বিষয়গুলি করুন।


2

এটি নেक्रोমেন্সির একটি পরীক্ষা :-)

বেশিরভাগ উত্তর পারফরম্যান্স এবং এপিআই পার্থক্য তুলনা করে। তারা দুটি মূল ক্রিয়াকলাপের পৃথক শব্দার্থবিজ্ঞানের মূল ধারণাটি মিস করে।

আপনার অন্তর্দৃষ্টি সঠিক। x.equals (y) x.compareTo (y) == 0. এর সাথে বিনিময়যোগ্য নয় প্রথমটি পরিচয়ের সাথে তুলনা করে, অন্যটি 'আকার' ধারণার সাথে তুলনা করে। এটি সত্য যে অনেক ক্ষেত্রে বিশেষত আদিম ধরণের সাথে এই দুটি সহ-প্রান্তিক হয়।

সাধারণ কেসটি হ'ল:

যদি x এবং y অভিন্ন হয় তবে তারা একই 'আকার' ভাগ করে: x.equals (y) যদি সত্য হয় => x.compareTo (y) 0 হয়।

তবে, যদি x এবং y একই আকার ভাগ করে দেয় তবে এর অর্থ এই নয় যে তারা অভিন্ন।

x.compareTo (y) যদি 0 হয় তবে এটি অবশ্যই x.equals (y) এর অর্থ সত্য নয়।

আকস্মিক উদাহরণ যেখানে পরিচয় আকার থেকে পৃথক হয় জটিল সংখ্যা হবে। ধরে নিন যে তুলনাটি তাদের নিখুঁত মান দ্বারা সম্পন্ন হয়েছে। সুতরাং দুটি জটিল নম্বর দেওয়া হয়েছে: Z1 = a1 + b1 * i এবং Z2 = a2 + b2 * i:

Z1.equals (z2) সত্য এবং যদি a1 = a2 এবং b1 = b2 হয় তবেই প্রত্যাশা দেয়।

তবে Z1.compareTo (জেড 2) 0 এর জন্য 0 এবং অসীম সংখ্যার (এ 1, বি 1) এবং (এ 2, বি 2) জোড়া দেয় যতক্ষণ না তারা শর্তটি সন্তুষ্ট করে A1 ^ 2 + বি 1 ^ 2 == এ 2 ^ 2 + বি 2 ^ 2।


1
x.equals (y) এর অর্থ পরিচয় নয়, এর অর্থ সমতা। জাভাতে ব্যবহারকারী-সংজ্ঞায়িত প্রকারের জন্য পরিচয়টি x == y ব্যবহার করে তুলনা করা হয়।
ফার্নান্দো পেলেসিসিওনি

2

সমান তুলনামূলকভাবে আরও দক্ষ হতে পারে।

স্ট্রিংয়ের চরিত্রের সিকোয়েন্সগুলির দৈর্ঘ্য যদি মেলে না তবে স্ট্রিংগুলি সমান হওয়ার কোনও উপায় নেই তাই প্রত্যাখ্যান আরও দ্রুত হতে পারে।

তদ্ব্যতীত যদি এটি একই বস্তু হয় (তাত্পর্য সমতা বরং তাত্ত্বিক সাম্যতা), এটি আরও কার্যকর হবে more

যদি তারা হ্যাশকোড ক্যাচিংও প্রয়োগ করে তবে হ্যাশকোডের ম্যাচ না মিললে নন-ইক্যুয়ালগুলি প্রত্যাখ্যান করা আরও দ্রুততর হতে পারে।


2

String.equals()প্রয়োজনের instanceofসময় চালক অপারেটরের compareTo()প্রয়োজন। আমার সহকর্মী পদ্ধতিতে অত্যধিক সংখ্যক instanceofকলগুলির কারণে বড় পারফরম্যান্সের ড্রপ-ডাউন উল্লেখ করেছেন equals(), তবে আমার পরীক্ষাটি compareTo()কেবল সামান্য দ্রুত প্রমাণিত হয়েছে।

আমি তবে জাভা ১.। ব্যবহার করছিলাম। অন্যান্য সংস্করণে (বা অন্যান্য জেডিকে বিক্রেতাদের) পার্থক্য আরও বড় হতে পারে।

পরীক্ষাটি প্রতিটি-থেকে-প্রতিটি স্ট্রিংকে 1000 এলিমেন্ট অ্যারেতে 10 বার পুনরাবৃত্তি করে compared


1
আমার ধারণা আপনি অবশ্যই খুব ছোট স্ট্রিং ব্যবহার করেছেন, একই দৈর্ঘ্য এবং উচ্চ চরিত্রের সাথে প্রথম অক্ষরে উচ্চতর বৈচিত্র্যের সাথে ফলাফল পাওয়ার জন্য কোথায় compareTo()দ্রুত equals()? তবে রিয়েল ওয়ার্ল্ডের বেশিরভাগ সেটের জন্য ডেটা equals()অনেক দ্রুত compareTo() == 0equals()যদি স্ট্রিংগুলির একটি সাধারণ উপসাগর থাকে তবে ভিন্ন দৈর্ঘ্য থাকে বা যদি সেগুলি একই বস্তু হয় তবে তা জ্বলে।
x4u

ঠিক আছে, আমার পরীক্ষা অনুমানের বিরুদ্ধে ছিল যে উদাহরণগুলি পারফরম্যান্স হত্যাকারী, সুতরাং স্ট্রিংগুলি প্রকৃতপক্ষে সংক্ষিপ্ত ছিল।
ডানুবিয়ার নাবিক

যদি আপনার স্ট্রিং এলোমেলো হয় এবং বেশিরভাগ দৈর্ঘ্যের মধ্যে পৃথক হয় তবে তুলনামূলকভাবে () এর চেয়ে বেশি সুস্পষ্ট পছন্দ সমান () পদ্ধতির হওয়া উচিত কারণ বেশিরভাগ ক্ষেত্রে এটি দৈর্ঘ্যে সমান না হলে অবিলম্বে এটি মিথ্যা ফিরে আসবে।
sactiw

1
  1. equalsযে কোনও অবজেক্টকে প্যারামিটার হিসাবে compareToনিতে পারে তবে কেবল স্ট্রিং নিতে পারে।

  2. কমেটো শূন্য হলে, compareToব্যতিক্রম ছুঁড়ে ফেলবে

  3. যখন আপনি জানতে চান যে কোথায় ভিন্নতা ঘটে, আপনি ব্যবহার করতে পারেন compareTo


CompTTo যে কোনও বস্তুকে আর্গুমেন্ট হিসাবে নিতে পারে। @ পূর্ববাধা যাদব উপরে বলেছিলেন, তুলনামূলক একটি সাধারণ যুক্তি লাগে। আপনি যদি তুলনীয় <স্ট্রিং> হিসাবে তুলনামূলকভাবে প্রয়োগ করেন তবে আপনাকে কেবল স্ট্রিং ব্যবহারের অনুমতি দেওয়া হবে।
গৌরব কুমার

1
  • equals: সমতা পরীক্ষা করতে এবং সদৃশগুলি সীমাবদ্ধ করার জন্য প্রয়োজনীয়। জাভা লাইব্রেরির অনেক শ্রেণি নকলগুলি খুঁজতে চাইলে এটি ব্যবহার করে। উদাহরণস্বরূপ HashSet.add(ob1)কেবলমাত্র যুক্ত হবে যদি এটি বিদ্যমান না থাকে। সুতরাং আপনি যদি কিছু ক্লাস এভাবে প্রসারিত করেন তবে ওভাররাইড করুন equals()

  • compareTo: উপাদান ক্রম জন্য প্রয়োজনীয়। আবার স্থিতিশীল বাছাইয়ের জন্য আপনার সমতা প্রয়োজন, সুতরাং 0 ফেরত আসবে।


0

সমান -

1- হ্যাশ টেবিলের মধ্যে কোনও প্রকারকে সঠিকভাবে কাজ করার অনুমতি দেওয়ার জন্য গেটহ্যাশকোড পদ্ধতিটি ওভাররাইড করুন।

2- সমান পদ্ধতি প্রয়োগের ক্ষেত্রে ব্যতিক্রমকে ছুঁড়বেন না। পরিবর্তে, নাল আর্গুমেন্ট জন্য মিথ্যা ফিরে।

3-

  x.Equals(x) returns true.

  x.Equals(y) returns the same value as y.Equals(x).

  (x.Equals(y) && y.Equals(z)) returns true if and only if x.Equals(z) returns true.

X.Equals (y) এর ধারাবাহিক অনুরোধগুলি যতক্ষণ x এবং y দ্বারা রেফারেন্স করা অবজেক্টটি সংশোধিত না হয় ততক্ষণ একই মান প্রদান করে।

x.Equals(null) returns false.

4- কিছু ধরণের অবজেক্টের জন্য, রেফারেন্সিয়াল সাম্যের পরিবর্তে মান সমতার জন্য সমান পরীক্ষা নেওয়া বাঞ্ছনীয়। সমান এই জাতীয় বাস্তবায়ন যদি দুটি বস্তুর একই মান না হয়, এমনকি যদি এটি একই উদাহরণ না হয় তবে সত্য হয়।

উদাহরণ স্বরূপ -

   Object obj1 = new Object();
   Object obj2 = new Object();
   Console.WriteLine(obj1.Equals(obj2));
   obj1 = obj2; 
   Console.WriteLine(obj1.Equals(obj2)); 

আউটপুট: -

False
True

যখন তুলনা করার -

বর্তমান উদাহরণটিকে একই ধরণের অন্য কোনও অবজেক্টের সাথে তুলনা করে এবং একটি পূর্ণসংখ্যা ফেরত দেয় যা নির্দেশ করে যে বর্তমান উদাহরণটি পূর্ববর্তী, অনুসরণ করে, বা অন্য অবস্থার মতো সাজানোর ক্রমে একই অবস্থানে ঘটে কিনা।

এটি ফিরে আসে -

শূন্যের চেয়ে কম - এই উদাহরণটি সাজানোর ক্রমে আপত্তিটির আগে। শূন্য - এই উদাহরণটি একই অবস্থানে একইভাবে সাজানো ক্রমে ऑজেক্ট হিসাবে ঘটে। শূন্যের চেয়ে বৃহত্তর - এই উদাহরণটি সাজানোর ক্রমে আপত্তি অনুসরণ করে।

উদাহরণস্বরূপ বস্তুটি একই ধরণের না হলে এটি আর্গুমেন্টএক্সেপশন নিক্ষেপ করতে পারে।

উদাহরণস্বরূপ আপনি এখানে পরিদর্শন করতে পারেন।

সুতরাং আমি তুলনামূলক তুলনায় সমান ব্যবহার করার পরামর্শ দিই।


কোন GetHashCode()পদ্ধতি নেই। মানে hashCode()?
মারকুইস

0

"সমান" অবজেক্টগুলির তুলনা করুন এবং সত্য বা মিথ্যা প্রত্যাবর্তন করুন এবং সত্য হলে "0" এর সাথে তুলনা করুন বা একটি সংখ্যা [> 0] বা [<0] মিথ্যা হলে এখানে একটি উদাহরণ:

<!-- language: lang-java -->
//Objects Integer
Integer num1 = 1;
Integer num2 = 1;
//equal
System.out.println(num1.equals(num2));
System.out.println(num1.compareTo(num2));
//New Value
num2 = 3;//set value
//diferent
System.out.println(num1.equals(num2));
System.out.println(num1.compareTo(num2));

ফলাফল:

num1.equals(num2) =true
num1.compareTo(num2) =0
num1.equals(num2) =false
num1.compareTo(num2) =-1

ডকুমেন্টেশন তুলনা: https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

ডকুমেন্টেশন সমান: https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)


0

এখানে compareTo()ওভার ব্যবহার করার সময় একটি বিষয় গুরুত্বপূর্ণ যা ক্লাসগুলির জন্য কাজ করে equals()যা compareTo'তুলনীয়' ইন্টারফেস প্রয়োগ করে অন্যথায় এটি একটি নিক্ষেপ করবেNullPointerExceptionStringক্লাসগুলি তুলনামূলক ইন্টারফেস প্রয়োগ StringBufferকরে যখন "foo".compareTo("doo")আপনি Stringবস্তুতে ব্যবহার করতে পারেন তবে অবজেক্টে নয় StringBuffer


0
String s1 = "a";
String s2 = "c";

System.out.println(s1.compareTo(s2));
System.out.println(s1.equals(s2));

এই প্রিন্ট -2 এবং মিথ্যা

String s1 = "c";
String s2 = "a";
System.out.println(s1.compareTo(s2));
System.out.println(s1.equals(s2));

এটি 2 এবং মিথ্যা প্রিন্ট করে

String s1 = "c";
String s2 = "c";
System.out.println(s1.compareTo(s2));
System.out.println(s1.equals(s2));

এটি 0 এবং সত্য মুদ্রণ করে

উভয় স্ট্রিং মেলে যদি এবং শুধুমাত্র বুলেটিয়ান সমান।

তুলনা টো বলতে বোঝায় যে তারা কেবল মিলছে কি না তা জানাতে নয়, কোন স্ট্রিংটি অন্যের চেয়ে কম এবং তা কীভাবে, অভিধানের দিক থেকেও তা বোঝাতে। এটি বেশিরভাগ সংগ্রহের বাছাইয়ের সময় ব্যবহৃত হয়।


-1

আমি বিশ্বাস করি equalsএবং ফেরতের equalsIgnoreCaseপদ্ধতিগুলি এবং এটি কার্যকর যদি আপনি স্ট্রিং অবজেক্টের মানগুলির তুলনা করতে চান তবে বাস্তবায়নের ক্ষেত্রে এবং পদ্ধতিগুলির ক্ষেত্রে ইতিবাচক, নেতিবাচক এবং শূন্য মান ফিরে আসে যা বাছাইয়ের ক্ষেত্রে কার্যকর হবে।StringtruefalsecompareTocompareToIgnoreCase

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.