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

 

posted @ 2015-01-04 12:54  风巽•千叶翔龙  阅读(3964)  评论(0编辑  收藏  举报