首页 > 代码库 > Java中的null值总结

Java中的null值总结

自我总结,有什么不对或不到位的地方,请指出,感激不尽!

 

目的:熟练掌握java中null值出现的情况,避免NullPointerException

代码环境准备:需要引入junit;将代码package部分改成自己的package名。然后即可单元测试。

 

需要理解的概念:

包装类:例如:Integer,Long,Double,Boolean等,对应的基本类型为:int,long,double,boolean等

自动装箱:java提供的自动将基本类型的变量转换成包装类型的变量的功能。

自动拆箱:java提供的自动将包装类型的变量转换成基本类型的变量的功能。

 

上代码:JavaNull.java

package com.core.test;import org.junit.Test;public class JavaNull {    /*java version : 1.6 */         public static String name;        //模拟装箱(该case仅是用来帮助理解自动装箱过程)    @Test    public void test001(){        int a = 10 ;        Integer A = Integer.valueOf(a);        put(A);    }            //模拟拆箱(该case仅是用来帮助理解自动拆箱过程)    //若包装类型变量值为null,转换成基本类型的变量时,不会赋值成对应的初值,会报NullPointException    @Test    public void test002(){        Integer A = null;        int a = A.intValue();  //NullPointException        put(a);    }        //String类型的对象判断非空并且非空字符串,则如case test003所示即可    @Test    public void test003(){        String name  = null ;        if(null !=name && !name.isEmpty()){            put(null);        }    }            //静态变量未初始化,但不会报空指针异常,因为虚拟机在加载该类的同时,会初始化静态变量值为null    @Test    public void test004(){        put(name);    }            //当Integer对象的值超过127时,引用对象不再指向原来的内存地址,所以case test005打印结果为:"a == b",test006打印结果为:"a != b"    //当变量为引用类型时,"==" 判断变量是否指向同一内存地址,".equal()"判断变量的值是否相等    @Test    public void test005(){        Integer a = 100;        Integer b = 100;        if(a == b){            put("a == b");        }else{            put("a != b");        }    }    @Test    public void test006(){        Integer a = 128;        Integer b = 128;        if(a == b){            put("a == b");        }else{            put("a != b");        }    }            //转换(null值是所有引用类型的默认值,可以强制转换为任一对象类型)    //猜想:java中存在一个潜在的Null类概念,是所有引用类型的变量的子类,test008打印结果为:"test--null",说明存在一个潜在Null.toString方法    @Test    public void test007(){        String a = (String)null;        Double b = (Double)null;    }    @Test    public void test008(){        String temp = null;        put("test--"+temp);    }        //静态方法可以由类名直接调用,该case只是为了测试    //若对象test值为null,则用该对象调用静态方法时,不会报NullPointException,但调用非静态方法则会报NullPointException    @Test    public void test009(){        JavaNull test = null;        test.getStaticMethod();        test.getNotStaticMethod();//NullPointException    }        //null值比较会返回true    @Test     public void test010(){        if(null == null ){            put("yes");        }else{            put("no");        }    }        //case test011和test012为instanceof的用法    //instanceof说明:如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false    @Test    public void test011(){    //    Integer num = null;        Integer num = new Integer(0);;        if(num instanceof Integer){            put("yes");        }else{            put("no");        }    }    //instanceof可以匹配数组    @Test    public void test012(){        String str[] = {"abc","bcd"};        if(str instanceof String[]){            put("yes");        }else{            put("no");        }    }        public static void  getStaticMethod(){        put("StaticMethod");    }        public void  getNotStaticMethod(){        put("NotStaticMethod");    }    public  static void put(Object obj){        System.out.println(obj);    }    }

 

以上是我的总结,参考文章:http://www.importnew.com/14229.html

               http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html

 

Java中的null值总结