Java Enterprise Java User Code: Avoiding Those Pesky NullPointerExceptions

User Code: Avoiding Those Pesky NullPointerExceptions

NullPointerExceptions are a fact of life in Java.
Especially since everything is an object, and any
object can be null.

Because of this, I have developed a habit of invoking
methods only on objects I know have been instantiated.

For example…

  private String _name = "";  // instantiated with a
value and never allowed to be set to null
  public boolean checkName(String newName) {
    return _name.equals(newName);
  }

is much better than…

  public boolean checkName(String newName) {
    return newName.equals(_name);  // this will throw
a NullPointerException if newName is null!!!
  }

… after all, newName might be null and attempting to
invoke the .equals() method would throw an exception.
However, if _name could also be set to null, then you
should use something like…

  public boolean checkName(String newName) {
    if (_name != null) {
      return _name.equals(newName);
    }
    else if (newName != null) {  // _name is null and
newName is not
      return false;
    }
    else {  // both null
      return true;  // or false, depending on your
needs
    }
  }

Not the most elegant code, but effective.

Now, here’s the cool part. Did you know you can
reverse “hard-coded” comparisons?

  boolean result = "Hello world".equals(testString);  
      // compare a String object to "String"
  boolean result = new Integer(1).equals(testInteger);
 // compare an Integer object to the number "1"

It may look strange having “Hello world” on the left
side of the comparison, but it sure beats…

  boolean result = false;
  if (testString != null) {
    result = testString.equals("Hello world");
  }

or even worse, a try/catch that returns false when an
exception is thrown.

This approach can be used on any method that accepts a
null object as a parameter, such as compareTo(),
compareToIgnoreCase(), etc.

About the author

Russell Thackston is a Senior Programmer for the
Research and Development Division of Lectra Systems,
Inc., in Atlanta, Georgia.

[To contribute a code article to Gamelan, please contact [email protected]]

Latest Posts

Related Stories