Languages
[Edit]
EN

Java - how to compare strings?

3 points
Created by:
Kate_C
2845

One of the most common problem that affects new Java Developers is how to compare two String objects. They try to compare strings with == operator what makes only reference comparision - not values. To solve this problem equals method should be used. This article explains how to compare two strings.

1. String.equals method example

public class Program {

    public static void main(String[] args) {

        String a = "text 1";
        String b = "text 1";
        String c = "text 2";

        // CORRECT WAY OF VALUES COMPARISON:

        System.out.println(a.equals(b)); // true
        System.out.println(a.equals(c)); // false

        // good practice because of literal on left site
        // NullPoiterException will not occur if a or c variables will be null
        System.out.println("text 1".equals(a)); // true
        System.out.println("text 1".equals(c)); // false
        
        System.out.println("text 1".equals("text 1")); // true
        System.out.println("text 2".equals("text 1")); // false

        // BAD PRACTICE BECAUSE OF VARIABLE ON LEFT SITE AND LITERAL ON RIGHT SITE:
        
        // possible NullPoiterException if a or c variable will be null
        System.out.println(a.equals("text 1")); // true 
        System.out.println(c.equals("text 1")); // false
    }
}

Note: this approach is available sice java 1.7.

Output:

true
false
true
false
true
false
true
false

2. Object.equals method example

import java.util.Objects;

public class Program {

    public static void main(String[] args) {

        String a = "text 1";
        String b = "text 1";
        String c = "text 2";

        System.out.println(Objects.equals(a, b)); // true
        System.out.println(Objects.equals(a, c)); // false
        System.out.println(Objects.equals(b, a)); // true
        System.out.println(Objects.equals(c, a)); // false

        System.out.println(Objects.equals(a, "text 1")); // true
        System.out.println(Objects.equals("text 1", b)); // true

        System.out.println(Objects.equals("text 1", "text 1")); // true
        System.out.println(Objects.equals("text 1", "text 2")); // false
    }
}

Output:

true
false
true
false
true
true
true
false

3. How to do not compare strings in Java

public class Program {

    public static void main(String[] args) {

        String a = "text 1";
        String b = "text 1";
        String c = "text 2";

        // INCORRECT WAY OF VALUES COMPARISON:
        
        // this examples return true because of reference to same object in memory
        System.out.println(a == b); // true
        System.out.println("text 1" == "text 1"); // true
    }
}

Output:

true
true

Note: for all "text 1" occurrences java uses same object in memory what caused true result during references comparison with == operator.

Checkout latest findings & news:

Checkout latest questions:

Checkout latest wiki articles:

Hey 👋
Would you like to know what we do?
  • Dirask is a friendly IT community for learners, professionals and hobbyists to share their knowledge and help each other in extraordinary easy way.
  • We welcome everyone,
    no matter what the experience,
    no matter how basic the question is,
    this community will help you.
Rockstar community members
Thank you for great work 👍