Compare two objects in Java with possible null values
I want to compare two strings for equality when either or both can be null
.
So, I can't simply call .equals()
as it can contain null
values.
The code I have tried so far :
boolean compare(String str1, String str2) {
return ((str1 == str2) || (str1 != null && str1.equals(str2)));
}
What will be the best way to check for all possible values including null
?
Since Java 7 you can use the static method java.util.Objects.equals(Object, Object)
to perform equals checks on two objects without caring about them being null
.
If both objects are null
it will return true
, if one is null
and another isn't it will return false
. Otherwise it will return the result of calling equals
on the first object with the second as argument.
This is what Java internal code uses (on other compare
methods):
public static boolean compare(String str1, String str2) {
return (str1 == null ? str2 == null : str1.equals(str2));
}
For these cases it would be better to use Apache Commons StringUtils#equals, it already handles null strings. Code sample:
public boolean compare(String s1, String s2) {
return StringUtils.equals(s1, s2);
}
If you dont want to add the library, just copy the source code of the StringUtils#equals
method and apply it when you need it.