String comparison in Java
- Kaviya Ramalingam
- Sep 19, 2023
- 3 min read
Updated: Feb 22
Introduction:
Strings are one of the most commonly used datatypes in Java - they are simply sequence of characters, but they play a powerful role in almost every application. At the same time , dealing with strings in Java comes with some unique characteristics due to their immutability . In this blog posts, i will walk you through the different methods for comparing strings in Java and provide practical examples to help you grasp the concepts.
How String Immutability works?
In Java , strings are immutable. This means once a string is created , its value cannot be changed. Any Attempt to modify a string actually creates a new string object with the updated content leaving the original string untouched. For example:
String s1="Good"
s1=s1.concat("Morning");Here , what happens
The first one has 'Good' which remains unchanged.
A new string object 'Good morning' is created in second one.
so, two different string objects are created.
Benefits of String Immutability:
Improved Performance - The JVM can optimize memory usage since strings don't change.
Better Security - The immutability of strings makes them more secure. For example , if a string is used to store a password , it cannot be changed by a hacker.
Easier Readability - The immutability makes code more readable. This is because developers can be confident that the value of a string will not change unexpectedly.
String Comparison Methods:
Java provides several methods for comparing strings , each serving a distinct purpose. Let's dive into four of these methods:
1. equals():
This method compares two strings for equality by checking if their characters match.
Returns true if the strings are equal and false if they are not.
This method is case-sensitive, so "hello" and "Hello" would be considered different strings.
String s1 = "hello";
String s2 = "Hello";
String s3 = "hello";
boolean areEqual = s1.equals(s2);
System.out.println("Are s1 and s2 equal? " + areEqual); // Prints "false"
boolean areEqual1 = s1.equals(s3);
System.out.println("Are s1 and s2 equal? " + areEqual1); // Prints "true"2. equalsIgnoreCase():
Similar to equals(), but it ignores case while comparing.
Returns true if the strings are equal , ignoring case , and false if they're not.
String s1 = "Have a good day";
String s2 = "HAVE A GOOD DAY";
boolean areEqualIgnoreCase = s1.equalsIgnoreCase(s2); System.out.println("Are s1 and s2 equal ignoring case? " + areEqualIgnoreCase); // Prints "true"3. compareTo():
Compares two strings lexicographically based on Unicode values.
Returns a negative number if the first string is less than the second , zero if they are equal, and a positive number if the first string is greater.
String str1 = "apple";
String str2 = "banana";
String str3 = "apple";
int comparison = str1.compareTo(str2);
System.out.println("The comparison result is: " + comparison); // Prints -1
int comparison1 = str3.compareTo(str1);
System.out.println("The comparison result is: " + comparison1); // Prints 0
int comparison2 = str2.compareTo(str3);
System.out.println("The comparison result is: " + comparison2); // Prints 14. compareToIgnoreCase():
Similar to compareTo() , but it ignores case during comparison.
String str1 = "apple";
String str2 = "APPLE";
int comparisonIgnoreCase= str1.compareToIgnoreCase(str2); System.out.println("The comparison result ignoring case is: " + comparisonIgnoreCase); // Prints 0
Beware of the == Operator:
A common mistake is using the == operator for string comparison . Remember that == compares object references , not their values . If two strings have the same value but are stored in different memory locations , == will return false.
String s1 = "hello"; //string constant pool
String s2 = "hello";
String s3 = new String("hello"); //heap memory
System.out.println(s1 == s2);// prints true
System.out.println(s1 == s3);// prints falseThis happens because even though s1 and s3 have the same value , they are not stored in the same memory location.
Conclusion :
Understanding how to compare strings correctly is essential to avoid common mistakes and ensure the reliability and security of your application . Remember that choosing the correct comparison method depends on your specific use case and the requirements of your code . So , make sure to apply these concepts wisely.
Happy coding!!

