Compare two Strings in Java

String is a sequence of characters. In Java, objects of String are immutable which means they are constant and cannot be changed once created.

Below are 5 ways to compare two Strings in Java:

  1. Using user-defined function : Define a function to compare values with following conditions :
    1. if (string1 > string2) it returns a positive value.
    2. if both the strings are equal lexicographically
      i.e.(string1 == string2) it returns 0.
    3. if (string1 < string2) it returns a negative value.

    The value is calculated as (int)str1.charAt(i) – (int)str2.charAt(i)

    Examples:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: -9
    
    Input 1: Geeks
    Input 2: Geeks
    Output: 0
    
    Input 1: GeeksforGeeks
    Input 2: Geeks
    Output: 8
    

    Program:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program to Compare two strings
    // lexicographically
    public class GFG {
      
        // This method compares two strings
        // lexicographically without using
        // library functions
        public static int stringCompare(String str1, String str2)
        {
      
            int l1 = str1.length();
            int l2 = str2.length();
            int lmin = Math.min(l1, l2);
      
            for (int i = 0; i < lmin; i++) {
                int str1_ch = (int)str1.charAt(i);
                int str2_ch = (int)str2.charAt(i);
      
                if (str1_ch != str2_ch) {
                    return str1_ch - str2_ch;
                }
            }
      
            // Edge case for strings like
            // String 1="Geeks" and String 2="Geeksforgeeks"
            if (l1 != l2) {
                return l1 - l2;
            }
      
            // If none of the above conditions is true,
            // it implies both the strings are equal
            else {
                return 0;
            }
        }
      
        // Driver function to test the above program
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
      
            // Comparing for String 1 < String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + stringCompare(string1, string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + stringCompare(string3, string4));
      
            // Comparing for String 1 > String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + stringCompare(string1, string4));
        }
    }

    chevron_right

    
    

    Output:

    Comparing Geeksforgeeks and Practice : -9
    Comparing Geeks and Geeks : 0
    Comparing Geeksforgeeks and Geeks : 8
    
  2. Using String.equals() :In Java, string equals() method compares the two given strings based on the data/content of the string. If all the contents of both the strings are same then it returns true. If all characters do not match, then it returns false.

    Syntax:

    str1.equals(str2);

    Here str1 and str2 both are the strings which are to be compared.

    Examples:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: false
    
    Input 1: Geeks
    Input 2: Geeks
    Output: true
    
    Input 1: geeks
    Input 2: Geeks
    Output: false
    

    Program:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program to Compare two strings
    // lexicographically
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
            String string5 = new String("geeks");
      
            // Comparing for String 1 != String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + string1.equals(string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + string3.equals(string4));
      
            // Comparing for String 4 != String 5
            System.out.println("Comparing " + string4 + " and " + string5
                               + " : " + string4.equals(string5));
      
            // Comparing for String 1 != String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + string1.equals(string4));
        }
    }

    chevron_right

    
    

    Output:

    Comparing Geeksforgeeks and Practice : false
    Comparing Geeks and Geeks : true
    Comparing Geeks and geeks : false
    Comparing Geeksforgeeks and Geeks : false
    
  3. Using String.equalsIgnoreCase() : The String.equalsIgnoreCase() method compares two strings irrespective of the case (lower or upper) of the string. This method returns true if the argument is not null and the contents of both the Strings are same ignoring case, else false.

    Syntax:

    str2.equalsIgnoreCase(str1);

    Here str1 and str2 both are the strings which are to be compared.

    Examples:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: false
    
    Input 1: Geeks
    Input 2: Geeks
    Output: true
    
    Input 1: geeks
    Input 2: Geeks
    Output: true
    

    Program:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program to Compare two strings
    // lexicographically
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
            String string5 = new String("geeks");
      
            // Comparing for String 1 != String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + string1.equalsIgnoreCase(string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + string3.equalsIgnoreCase(string4));
      
            // Comparing for String 4 = String 5
            System.out.println("Comparing " + string4 + " and " + string5
                               + " : " + string4.equalsIgnoreCase(string5));
      
            // Comparing for String 1 != String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + string1.equalsIgnoreCase(string4));
        }
    }

    chevron_right

    
    

    Output:

    Comparing Geeksforgeeks and Practice : false
    Comparing Geeks and Geeks : true
    Comparing Geeks and geeks : true
    Comparing Geeksforgeeks and Geeks : false
    
  4. Using Objects.equals() : Object.equals(Object a, Object b) method returns true if the arguments are equal to each other and false otherwise. Consequently, if both arguments are null, true is returned and if exactly one argument is null, false is returned. Otherwise, equality is determined by using the equals() method of the first argument.

    Syntax:

    public static boolean equals(Object a, Object b)

    Here a and b both are the string objects which are to be compared.

    Examples:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: false
    
    Input 1: Geeks
    Input 2: Geeks
    Output: true
    
    Input 1: null
    Input 2: null
    Output: true
    

    Program:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program to Compare two strings
    // lexicographically
      
    import java.util.*;
      
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Geeks");
            String string3 = new String("Geeks");
            String string4 = null;
            String string5 = null;
      
            // Comparing for String 1 != String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + Objects.equals(string1, string2));
      
            // Comparing for String 2 = String 3
            System.out.println("Comparing " + string2 + " and " + string3
                               + " : " + Objects.equals(string2, string3));
      
            // Comparing for String 1 != String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + Objects.equals(string1, string4));
      
            // Comparing for String 4 = String 5
            System.out.println("Comparing " + string4 + " and " + string5
                               + " : " + Objects.equals(string4, string5));
        }
    }

    chevron_right

    
    

    Output:

    Comparing Geeksforgeeks and Geeks : false
    Comparing Geeks and Geeks : true
    Comparing Geeksforgeeks and null : false
    Comparing null and null : true
    
  5. Using String.compareTo() :

    Syntax:

    int str1.compareTo(String str2)

    Working:
    It compares and returns the following values as follows:

    1. if (string1 > string2) it returns a positive value.
    2. if both the strings are equal lexicographically
      i.e.(string1 == string2) it returns 0.
    3. if (string1 < string2) it returns a negative value.

    Examples:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: -9
    
    Input 1: Geeks
    Input 2: Geeks
    Output: 0
    
    Input 1: GeeksforGeeks
    Input 2: Geeks
    Output: 8
    

    Program:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program to Compare two strings
    // lexicographically
      
    import java.util.*;
      
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
      
            // Comparing for String 1 < String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + string1.compareTo(string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + string3.compareTo(string4));
      
            // Comparing for String 1 > String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + string1.compareTo(string4));
        }
    }

    chevron_right

    
    

    Output:

    Comparing Geeksforgeeks and Practice : -9
    Comparing Geeks and Geeks : 0
    Comparing Geeksforgeeks and Geeks : 8
    

Why not to use == for comparison of Strings?

In general both equals() and “==” operator in Java are used to compare objects to check equality but here are some of the differences between the two: