在大型程序开放过程中,无论是SSH还是安卓,都需要对空值进行判断,尤其是某个实体传递过来的值,但是,往往对于null的判断条件没写好,导致空指针异常。
对于任意的Object,判断其是否为null,应该将Object xx==null写在所有判断条件的前头,一个为null的东西,调用其自身的任何方法都会出现著名的java.lang.NullPointerException空指针异常,包括Object.equals(null)都是会导致空指针异常的。其实一个为null的东西,它只能执行Object xx==null,其余任何的方法调用都是会出空指针异常的。
不过,要注意一点,对于String xx="",xx就不为null了,虽然其值为空,但是xx此时是经过实体化的对象,其可以调用isEmpty()方法来判断其是否是"",与String xx=null有根本区别,String xx=null与Object xx=null一样,都是只能执行Object xx==null,其余任何的方法调用都是会出空指针异常的。
用一个程序来说明这个问题,代码如下:
public class javaNullPointTest { public static void ObjectIsNull(Object object) { // Object的判空 // 正确的判空 try { if (object == null) { System.out.println("空指针异常没有发生,为null"); } } catch (NullPointerException e) { System.out.println("object == null不会导致空指针异常发生"); } // 错误的判空 try { if (object.equals(null)) { System.out.println("空指针异常没有发生,为null"); } } catch (NullPointerException e) { System.out.println("object.equals(null)导致空指针异常发生"); } } public static void StringIsNull(String string) { // String的判空 try { if (string == null) { System.out.println("空指针异常没有发生,为null"); } else if (string.isEmpty()) { System.out.println("空指针异常没有发生,值为空“”"); } } catch (NullPointerException e) { System.out.println("string==null不会空指针异常发生"); } // 错误的判空 try { if (string.equals(null)) { System.out.println("空指针异常没有发生,为null"); } } catch (NullPointerException e) { System.out.println("string.equals(null)导致空指针异常发生"); } } public static void main(String[] args) { Object nullObject = null; String nullString1 = ""; String nullString2 = null; System.out.println("对于nullObject:"); ObjectIsNull(nullObject); System.out.println("对于nullString1:"); StringIsNull(nullString1); System.out.println("对于nullString2:"); StringIsNull(nullString2); } }
运行结果如下: