zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Go_海量用户即时通讯系统
    Golang redis学习指南
    Golang 操作_Redis
    十七、Redis
    十六、网络编程-tcp socket编程
    十五、反射
    十四、goroutine(协程)和channel(管道)
    Jmeter笔记(9)Jmeter 性能测试资源监控方法(本地与服务器)(转)
    Fiddler笔记(8)重装时清除已有证书及解决tunnel to 443问题
    Jmeter笔记(8)Jmeter与MySql连接
  • 原文地址:https://www.cnblogs.com/xxyfhjl/p/4200854.html
Copyright © 2011-2022 走看看