那么,问题来了,我们这样的新手java,怎么在工作和代码中避免出现此类情况呢?
1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。
总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常;如下:
示例1:
Object unknownObject = null;
//错误方式 – 可能导致 NullPointerException
if(unknownObject.equals("knownObject")){
System.err.println("This may result in NullPointerException if unknownObject is null");
}
//正确方式 - 即便 unknownObject是null也能避免NullPointerException
if("knownObject".equals(unknownObject)){
System.err.println("better coding avoided NullPointerException");
}
示例2:
String unknownStr = null;
//错误方式 – 可能导致 NullPointerException
if(unknownStr .equals("knownObject")){
System.err.println("This may result in NullPointerException if unknownObject is null");
}
//正确方式 - 即便 unknownObject是null也能避免NullPointerException
if("knownStr".equals(unknownStr)){
System.err.println("better coding avoided NullPointerException");
}