Java String equals, equalsIgnoreCase and contentEquals

Use the String equals and equalsIgnoreCase methods. The equality operator and null are tested.

Equals, equalsIgnoreCase. Strings contain characters. These can be letters (lowercase and uppercase), digits, spaces. We want to compare two strings for equality.

With equals, we test the chars in two string objects. If all the characters are the same, equals() returns true. With equalsIgnoreCase, lowercase and uppercase are considered the same.

Warning: With the equality operator == only the references are compared, not the exact characters in two strings.

So: This can give incorrect results when two strings contain the same chars, but are not the same reference.

First example. Let us use equals() in a simple program. We introduce three test strings. They all contain the same characters, but the third one is not a string literal.

Result: The three strings are all considered equal—equals() returns true. But "456" is not equal to the test strings.

Java program that uses String equals public class Program { public static void main(String[] args) { String test = "1234"; String test2 = "1234"; String test3 = Integer.toString(1234); if (test.equals(test2)) { System.out.println(true); } if (test.equals(test3)) { System.out.println(true); } if (!test.equals("456")) { System.out.println(false); } } } Output true true false

Equals operator. The == and != operators can be used on string references. But this does not handle the internal characters in the String objects. It just tests the references.

Here: The two strings contain the same chars, but are not the same instance. Equals() returns true, but the == operator returns false.

Java program that tests equality operator, equals public class Program { public static void main(String[] args) { String test = "carrot1"; String test2 = "carrot" + Integer.toString(1); // Test the equals, not equals operator. if (test != test2) { System.out.println("Not equal"); System.out.println(test); System.out.println(test2); } // The equals method is different. if (test.equals(test2)) { System.out.println("Equals = true"); System.out.println(test); System.out.println(test2); } } } Output Not equal carrot1 carrot1 Equals = true carrot1 carrot1

EqualsIgnoreCase. Sometimes we do not care if a letter is uppercase or lower. The EqualsIgnoreCase method treats both cases as equal. It does not care about upper and lower.

Result: The program has a string "APPLE" and a string "apple." EqualsIgnoreCase returns true when we test those two strings.

Java program that uses equalsIgnoreCase public class Program { public static void main(String[] args) { String name = "APPLE"; String name2 = name.toLowerCase(); // The uppercase and lowercase letters are considered equal. if (name.equalsIgnoreCase(name2)) { System.out.println(true); System.out.println(name); System.out.println(name2); } } } Output true APPLE apple

Null. This program shows that a non-null string never equals a null string. Equals() will always return false when passed a null variable. But it throws no exception.
Java program that uses equals, null public class Program { public static void main(String[] args) { String value = "radish"; String other = null; // The null literal is not equal to any String. if (!value.equals(other)) { System.out.println(true); } } } Output true

ContentEquals. This method tests the value of objects through their CharSequences. So it can compare a String against a StringBuilder. It is called on a String instance.

Argument: We pass the other object to the contentEquals method. For example we can pass another String or a StringBuilder.


Result: This returns true if the character data in both objects is equal. It returns false otherwise.

Tip: With contentEquals we can avoid converting some objects (like a StringBuilder) to a String for comparison—this improves performance.

Java program that uses contentEquals public class Program { public static void main(String[] args) { // Create 2 strings with the same character data. String part1 = "cat100"; String part2 = "cat"; part2 += String.valueOf(100); // Create a StringBuilder with the same character data. StringBuilder builder = new StringBuilder(); builder.append("cat"); builder.append(100); // Use contentEquals to compare character data. if (part1.contentEquals(part2)) { System.out.println("True 1"); } if (part1.contentEquals(builder)) { System.out.println("True 2"); } } } Output True 1 True 2

With Strings, we must keep in mind the difference between references and objects. A string variable is a reference, but this reference points to an object.

With equality operators (like "==") we can test two references for equality. But to check the data within String objects, we must use equals or equalsIgnoreCase.
Dot Net Perls
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to