EN
Java - compare strings
3
points
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.