Java 之关键字 null 使用总结
1.null的使用
Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。比如我们在定义一个变量的时候我们通过会这样做:XXXX xxxx = null;在需要赋值的时候xxx = new XXXX();我们知道我们在定义变量的时候,java会给其赋一个初始化的值,一般的基本类型中整数类型int、byte、short、long的自动赋值为0,带小数点的float、double自动赋值为0.0,boolean的自动赋值为false,而引用类型变量自动赋值为null。需要注意的是不能将 null 赋给原始类型(byte、short、int、long、char、float、double、boolean)变量。
2.null与Object关系
先看段代码以及运行结果
package com.test; public class NullTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub if (null instanceof Object) { System.out.println("null是Object类型"); } else { System.out.println("null不是Object类型"); } } }
毫无疑问结果是:null不是Object类型
3.访问static成员变量和方法
首先看下代码,可以猜测下具体的执行结果,
package com.test; public class NullTest { public static String str = "nullString测试"; /** * @param args */ public static void main(String[] args) { System.out.println("************ "); System.out.println(((NullTest)null).str+" 来自于静态变量"); System.out.println("************ "); ((NullTest)null).printStr(); System.out.println("************ "); } public static void printStr(){ System.out.println(str+" 来自于静态函数"); } }
执行结果是:
************ nullString测试 来自于静态变量 ************ nullString测试 来自于静态函数 ************
没有错误,这段代码可以正确的运行并且获取我们期望的结果;简单解析下:因为null值可以强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是无效对象,其返回值还是为null,而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。反过来,没有static修饰就只能用对象进行访问,使用null调用对象肯定会报空指针错了。
4.null的其他作用
如果我们想快速的释放对象所占的内存资源而不是期望GC和在合适的时候才扫描清除掉,我们就可以使用null。让一个非null的引用类型变量指向null。这样这个对象就不再被任何对象应用了,等待JVM垃圾回收机制去回收。也就是说将 null 赋给非原始变量相当于释放该变量先前所引用的对象。