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");
}
}
}
Java中的null
最新推荐文章于 2022-02-15 21:38:32 发布