Java中的null

package testnull;

import org.junit.Test;

/**
 * <strong>java中的null测试,注意:</strong>
 * <br>1.JVM中null规范:没有强制规定null应该是什么值,即:JVM没有给它分配内存(赋值null_清空对象)
 * <br>2.null不是对象或类型,没有分配内存,是一个特殊的值
 * <br>3.引用类型默认值是null
 * <br>4.基本类型不能赋值为null
 * <br>5.null值的包装类拆箱生成基本数据类型,会抛出空指针异常
 * <br>6.引用类型变量值为null时,instanceof都会返回false
 * <br>7.null值的引用变量,调用非静态方法,会抛出空指针异常(静态方法使用静态绑定,不会抛出空指针异常)
 * <br>8.null值的逻辑运算:只能是==或!=
 * <br>
 * <br><strong>java中null和JS中null的区别:</strong>
 * <br>1.java中null不是对象或类型,没有分配内存,是一个特殊的值
 * <br>2.JS中null是一种特殊的Object,且undefined与null是相等的
 * <br>
 * <br><strong>java中null和""的区别:</strong>
 * <br>1.null不是对象或类型,没有分配内存,是一个特殊的值
 * <br>2.""是String对象,长度为0的字符串对象
 * <br>
 * <br><strong>参考资料:</strong>
 * <br>1.Java中null规范:http://www.programcreek.com/2013/12/what-exactly-is-null-in-java/
 * <br>2.http://www.importnew.com/14229.html
 * <br>3.http://www.cnblogs.com/hanruyue/p/6024781.html
 * <br>4.JS中undefined与null的区别:http://www.jb51.net/article/44472.htm
 * @author TCM
 * @since 2017年4月5日下午7:36:50 
 */
public class NullTest {
	
	private Object obj;
	
	/**
	 * 任何引用类型的默认值为null
	 */
	@Test
	public void nullTest1(){
		System.out.println(obj ==null ? "obj为null" : "obj不为null");//null
	}
	
	/**
	 * 注意:null既不是对象也不是一种类型,它仅是一种特殊的值<br>
	 * 1.null赋值给任何引用类型<br>
	 * 2.null可以转换为任何引用类型<br>
	 * 3.null不能赋值给基本类型变量(8种基本类型_int,double......)
	 */
	@Test
	public void nullTest2(){
		//int i = null;
		Integer itr = null;//null赋值给任何引用类型
		Integer myItr = (Integer) null;//null可以转换为任何引用类型
		System.out.println(itr ==null ? "itr为null" : "itr不为null");
		System.out.println(myItr ==null ? "myItr为null" : "myItr不为null");
	}
	
	/**
	 * null值的包装类拆箱生成基本数据类型抛出空指针异常<br>
	 * 错误认知:自动装箱会将null转换成各自基本类型的默认值
	 */
	@Test(expected = NullPointerException.class)
	public void nullTest3(){
		Integer itr = null;
		int i = itr;//报错:空指针异常
	}
	
	/**
	 * null值的引用类型变量,instanceof都会返回false
	 */
	@Test
	public void nullTest4(){
		Integer itr = null;
		if (itr instanceof Integer) {
			System.out.println("itr类型是Integer");
		} else {
			System.out.println("itr类型不是Integer");
		}
	}
	
	/**
	 * 1.null值的引用变量,调用非静态方法,会抛出空指针异常
	 * 2.静态方法使用静态绑定,不会抛出空指针异常
	 */
	@Test
	public void nullTest5(){
		NullTest testing = null;
		testing.isStaticMethod();//null值的引用变量,调用静态方法使用静态绑定,不会抛出空指针异常
		testing.isNotStaticMethod();//null值的引用变量,调用非静态方法,会抛出空指针异常
	}
	
    private static void isStaticMethod(){
        System.out.println("我是静态方法,不会抛出空指针异常");
    }
 
    private void isNotStaticMethod(){
    	System.out.println("我不是静态方法,会抛出空指针异常");
    }
    
    /**
     * null值的逻辑运算:只能是==或!=,不能是其他的逻辑运算(如:>,>=)
     */
    @Test
	public void nullTest6(){
    	Integer itr = null;
    	if (itr == null) {
    		System.out.println("java中null==null为true");
		}
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值