自我总结,有什么不对或不到位的地方,请指出,感激不尽!
目的:熟练掌握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
时间: 2024-10-27 16:21:00