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 赋给非原始变量相当于释放该变量先前所引用的对象。

posted on 2015-05-10 09:33  叼烟斗的纤夫  阅读(1280)  评论(0编辑  收藏  举报