10

I have a function in one of my classes that compares itself with another instance of the same class - and finds out which variables differ. This is for the purpose of minimizing network load with a main database (by only uploading data that needs to be uploaded, instead of uploading the whole object).

For this, I have been trying to make use of the object.equals() function to compare the two objects.

I soon found that the object.equals() does not handle nulls, and after reading this question, I understand why.

So an example of my broken code is as follows:

public class MyObject {

    String myString;
    String myString2;

    public String getChangedVars(MyObject comparisonObj) {
        ArrayList<String> changedVars = new ArrayList<String>();

        if (!this.myString.equals(comparisonObj.myString))
            changedVars.add("myString");
        if (!this.myString2.equals(comparisonObj.myString2))
            changedVars.add("myString2");

        return changedVars.toString();
    }
}

My question is - on the basis that either one of the variables being compared could be null, what is a simple way to compare two variables whilst avoiding a NullPointerException?

Edit: Simply checking for null on both objects first doesn't work well, as I still want to compare if the object has a reference or not. Eg, if one item is null and the other is not, I want this to resolve to true, as the variable has changed.

2
  • 1
    Check for null first, on both objects.
    – user1907906
    Commented Feb 4, 2014 at 9:28
  • Java 7: java.util.Objects.equals(Object a, Object b) Commented Feb 4, 2014 at 9:31

4 Answers 4

30

There is new utility class available in jdk since 1.7 that is Objects .

This class consists of static utility methods for operating on objects. These utilities include null-safe or null-tolerant methods for computing the hash code of an object, returning a string for an object, and comparing two objects.

You can use Objects.equals, it handles null.

Objects.equals(Object a, Object b) 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.

if(Objects.equals(myString,myString2)){...}
2
  • 3
    Aah .. Something new. +1. Commented Feb 4, 2014 at 9:33
  • What a shame, this solution is great - unfortunately I don't seem to have access to the Objects class within Android - however as I didn't specify that this was an Android question (I honestly didn't think it was relevant) - then I will accept this answer anyway. Thanks! Commented Feb 4, 2014 at 9:40
1

You can use Apache object utils

ObjectUtils.equals(Object object1, Object object2) -- Returns boolean

this method has been replaced by java.util.Objects.equals(Object, Object) in Java 7

0
    if (this.myString != null && this.myString.equals(comparisonObj.myString))
{
                changedVars.add("myString");
}
0
0

Use StringUtils provided by apache

StringUtils.equals(myString,comparisonObj.myString);

Not the answer you're looking for? Browse other questions tagged or ask your own question.