📅  最后修改于: 2020-03-18 12:27:15             🧑  作者: Mango
几乎所有的编程语言都会有null的绑,几乎没有程序员会为空所困扰。在Java中,null与java.lang.NullPointerException相关联。因为它是java.lang包中的类,所以当我们尝试执行一些带有或不带有null的操作时有时会调用它,有时我们甚至不知道它的源头位置。
以下是每个Java程序员都应了解的有关Java中null的一些重要要点:
1. null是区分大小写的: null在Java中是文字,并且由于关键字在Java中是区分大小写的,因此我们不能像在C语言中那样编写NULL或0。
public class Test
{
public static void main (String[] args) throws java.lang.Exception
{
// 编译错误: can't find symbol 'NULL'
Object obj = NULL;
//成功编译
Object obj1 = null;
}
}
输出:
5: error: cannot find symbol
can't find symbol 'NULL'
^
variable NULL
class Test
1 error
2.参考变量值: Java中的任何参考变量的默认值均为null。
public class Test
{
private static Object obj;
public static void main(String args[])
{
// 打印 null;
System.out.println("obj的值是 : " + obj);
}
}
输出:
obj的值是 : null
3. null的类型:与常见的数据类型不同,null不是Object对象也不是类型。这只是一个特殊值,可以将其分配给任何引用类型,并且可以将cast null键入任何类型。
示例:
// null可以被赋值给String
String str = null;
// null可以被赋值给Integer
Integer itr = null;
// null可以被赋值给Double
Double dbl = null;
// null可以被转换成String
String myStr = (String) null;
// null可以被转换成Integer
Integer myItr = (Integer) null;
// null可以被转换成Double
Double myDbl = (Double) null;
4.自动装箱和拆箱: 在自动装箱和拆箱操作期间,如果将空值null分配给原始装箱的数据类型,则编译器仅引发Nullpointer异常错误。
public class Test
{
public static void main (String[] args) throws java.lang.Exception
{
// 一个integer可以为null
Integer i = null;
// 把null拆箱给integer,会报错NullpointerException
int a = i;
}
}
输出:
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.Java:6)
5. instanceof运算符: Java instanceof运算符用于测试对象是否是指定类型(类,子类或接口)的实例。在运行时,如果Expression的值不为null,则instanceof运算符的结果为true。
这是instanceof操作的重要属性,使其对于类型转换检查很有用。
public class Test
{
public static void main (String[] args) throws java.lang.Exception
{
Integer i = null;
Integer j = 10;
//打印false
System.out.println(i instanceof Integer);
//成功编译
System.out.println(j instanceof Integer);
}
}
输出:
false
true
6.静态方法与非静态方法:我们不能对具有空值null的引用变量调用非静态方法,它将抛出NullPointerException,但可以对具有空值null的引用变量调用静态方法。由于静态方法是使用静态绑定的,因此它们不会引发Null指针异常。
public class Test
{
public static void main(String args[])
{
Test obj= null;
obj.staticMethod();
obj.nonStaticMethod();
}
private static void staticMethod()
{
//可以被null引用调用
System.out.println("静态方法, 可以对null引用调用");
}
private void nonStaticMethod()
{
//无法被null引用调用
System.out.print("非静态方法");
System.out.println("无法对null的引用调用");
}
}
输出:
static method, can be called by null referenceException in thread "main"
java.lang.NullPointerException
at Test.main(Test.Java:5)
7. ==和!=,在Java中,允许对null进行比较且使用不等于运算符,但可以使用null。这对于用Java中的对象检查null很有用。
public class Test
{
public static void main(String args[])
{
//返回 true;
System.out.println(null==null);
//返回 false;
System.out.println(null!=null);
}
}
输出:
true
false