السلاسل المحرفية غير قابلة للمقارنة

من الضروري في كثير من الأحيان أن نقارن بين سلسلتين لنرى إذا كانتا متطابقتين أو لنرى أي واحدة تسبق الأخرى حسب الترتيب الأبجدي. سيكون لطيفاً لو أمكننا استخدام عوامل المقارنة، مثل == و <، لكن ذلك غير ممكن.
حتى نقارن بين سلسلتين، علينا استخدام عمليتي equals وcompareTo. مثلاً:
كود:
String name1 = "Alan Turing";
String name2 = "Ada Lovelace";
if (name1.equals (name2)) {
   System.out.println ("The names are the same.");
}
int flag = name1.compareTo (name2);
if (flag == 0) {
   System.out.println ("The names are the same.");
} else if (flag < 0) {
   System.out.println ("name1 comes before name2.");
} else if (flag > 0) {
   System.out.println ("name2 comes before name1.");
}
تبدو بنية التعليمات غريبة قليلاً هنا. للمقارنة بين شيئين، عليك استدعاء عملية على أحدهما وتمرير الآخر كمتحول.
القيمة المعادة من equals واضحة بشكل كاف؛ true إذا احتوت السلسلتين على نفس المحارف، وfalse ما عدا ذلك.
القيمة المعادة من compareTo غريبة قليلاً. إن الفرق بين المحارف الأولى في السلسلتين هو الذي يختلف. إذا كانت السلسلتان متساويتين، يكون الفرق 0. إذا كانت السلسلة الأولى (التي تم استدعاء العملية عليها) تسبق الثانية في الأبجدية، يكون الفرق سالباً. وإلا، فسيكون الفرق موجباً. في هذه الحالة سيكون الفرق 8 موجب، لأن الحرف الثاني من "Ada" يأتي قبل الحرف الثاني من "Alan" بثمانية حروف.
ولنبلغ حد الكمال، علينا أن نعترف بأن استخدام عامل == مع السلاسل المحرفية مشروع، إلا أنه نادراً ما يكون صحيحاً. سأشرح السبب في القسم 13.4؛ أما الآن، فلا تستخدمه.