千家信息网

Java中Null的知识有哪些

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"Java中Null的知识有哪些",在日常操作中,相信很多人在Java中Null的知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java中Nu
千家信息网最后更新 2026年11月04日Java中Null的知识有哪些

这篇文章主要介绍"Java中Null的知识有哪些",在日常操作中,相信很多人在Java中Null的知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java中Null的知识有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Java中的Null是什么?

正如我说过的那样,null是Java中一个很重要的概念。null设计初衷是为了表示一些缺失的东西,例如缺失的用户、资源或其他东西。但是,一年后,令人头疼的空指针异常给Java程序员带来不少的骚扰。在这份材料中,我们将学习到Java中null关键字的基本细节,并且探索一些技术来尽可能的减少null的检查以及如何避免恶心的空指针异常。

1)首先,null是Java中的关键字,像public、static、final。它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错。

Object obj = NULL; // Not Ok Object obj1 = null  //Ok

使用其他语言的程序员可能会有这个问题,但是现在IDE的使用已经使得这个问题变得微不足道。现在,当你敲代码的时候,IDE像Eclipse、Netbeans可以纠正这个错误。但是使用其他工具像notepad、Vim、Emacs,这个问题却会浪费你宝贵时间的。

2)就像每种原始类型都有默认值一样,如int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。就像你创建了一个布尔类型的变量,它将false作为自己的默认值,Java中的任何引用变量都将null作为默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量(但当你使用一个没有初始化的局部变量,编译器会警告你)。为了证明这个事实,你可以通过创建一个变量然后打印它的值来观察这个引用变量,如下图代码所示:

private static Object myObj; public static void main(String args[]){     System.out.println("What is value of myObjc : " + myObj); }
What is value of myObjc : null

这对静态和非静态的object来说都是正确的。就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用非静态变量。

3)我们要澄清一些误解,null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,来看下面的代码:

String str = null; // null can be assigned to String Integer itr = null; // you can assign null to Integer also Double dbl = null;  // null can also be assigned to Double   String myStr = (String) null; // null can be type cast to String Integer myItr = (Integer) null; // it can also be type casted to Integer Double myDbl = (Double) null; // yes it's possible, no error

你可以看到在编译和运行时期,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。

4)null可以赋值给引用变量,你不能将null赋给基本类型变量,例如int、double、float、boolean。如果你那样做了,编译器将会报错,如下所示:

int i = null; // type mismatch : cannot convert from null to int short s = null; //  type mismatch : cannot convert from null to short byte b = null: // type mismatch : cannot convert from null to byte double d = null; //type mismatch : cannot convert from null to double   Integer itr = null; // this is ok int j = itr; // this is also ok, but NullPointerException at runtime

正如你看到的那样,当你直接将null赋值给基本类型,会出现编译错误。但是如果将null赋值给包装类object,然后将object赋给各自的基本类型,编译器不会报,但是你将会在运行时期遇到空指针异常。这是Java中的自动拆箱导致的,我们将在下一个要点看到它。

5) 任何含有null值的包装类在Java拆箱生成基本数据类型时候都会抛出一个空指针异常。一些程序员犯这样的错误,他们认为自动装箱会将null转换成各自基本类型的默认值,例如对于int转换成0,布尔类型转换成false,但是那是不正确的,如下面所示:

Integer iAmNull = null; int i = iAmNull; // Remember - No Compilation Error

但是当你运行上面的代码片段的时候,你会在控制台上看到主线程抛出空指针异常。在使用HashMap和Integer键值的时候会发生很多这样的错误。当你运行下面代码的时候就会出现错误。

import java.util.HashMap; import java.util.Map;   /**  * An example of Autoboxing and NullPointerExcpetion  *   * @author WINDOWS 8  */ public class Test {     public static void main(String args[]) throws InterruptedException {       Map numberAndCount = new HashMap<>();       int[] numbers = {3, 5, 7,9, 11, 13, 17, 19, 2, 3, 5, 33, 12, 5};         for(int i : numbers){          int count = numberAndCount.get(i);          numberAndCount.put(i, count++); // NullPointerException here       }            } }

输出:

Exception in thread "main" java.lang.NullPointerException  at Test.main(Test.java:25)

这段代码看起来非常简单并且没有错误。你所做的一切是找到一个数字在数组中出现了多少次,这是Java数组中典型的寻找重复的技术。开发者首先得到以前的数值,然后再加一,***把值放回Map里。程序员可能会以为,调用put方法时,自动装箱会自己处理好将int装箱成Interger,但是他忘记了当一个数字没有计数值的时候,HashMap的get()方法将会返回null,而不是0,因为Integer的默认值是null而不是0。当把null值传递给一个int型变量的时候自动装箱将会返回空指针异常。设想一下,如果这段代码在一个if嵌套里,没有在QA环境下运行,但是你一旦放在生产环境里,BOOM:-)

6)如果使用了带有null值的引用类型变量,instanceof操作将会返回false:

Integer iAmNull = null; if(iAmNull instanceof Integer){    System.out.println("iAmNull is instance of Integer");                                }else{    System.out.println("iAmNull is NOT an instance of Integer"); }

输出:

i
AmNull is NOT an instance of Integer

这是instanceof操作一个很重要的特性,使得对类型强制转换检查很有用

7)你可能知道不能调用非静态方法来使用一个值为null的引用类型变量。它将会抛出空指针异常,但是你可能不知道,你可以使用静态方法来使用一个值为null的引用类型变量。因为静态方法使用静态绑定,不会抛出空指针异常。下面是一个例子:

public class Testing {                 public static void main(String args[]){       Testing myObject = null;       myObject.iAmStaticMethod();       myObject.iAmNonStaticMethod();                                 }      private static void iAmStaticMethod(){         System.out.println("I am static method, can be called by null reference");    }      private void iAmNonStaticMethod(){        System.out.println("I am NON static method, don't date to call me by null");    }

输出:

I am static method, can be called by null reference Exception in thread "main" java.lang.NullPointerException                at Testing.main(Testing.java:11)

8)你可以将null传递给方法使用,这时方法可以接收任何引用类型,例如public void print(Object obj)可以这样调用print(null)。从编译角度来看这是可以的,但结果完全取决于方法。Null安全的方法,如在这个例子中的print方法,不会抛出空指针异常,只是优雅的退出。如果业务逻辑允许的话,推荐使用null安全的方法。

9)你可以使用==或者!=操作来比较null值,但是不能使用其他算法或者逻辑操作,例如小于或者大于。跟SQL不一样,在Java中null==null将返回true,如下所示:

public class Test {       public static void main(String args[]) throws InterruptedException {          String abc = null;        String cde = null;          if(abc == cde){            System.out.println("null == null is true in Java");        }          if(null != null){            System.out.println("null != null is false in Java");         }          // classical null check        if(abc == null){            // do something        }          // not ok, compile time error        if(abc > null){          }     } }

输出:

null == null is true in Java

这是关于Java中null的全部。通过Java编程的一些经验和使用简单的技巧来避免空指针异常,你可以使你的代码变得null安全。因为null经常作为空或者未初始化的值,它是困惑的源头。对于方法而言,记录下null作为参数时方法有什么样的行为也是非常重要的。总而言之,记住,null是任何一个引用类型变量的默认值,在java中你不能使用null引用来调用任何的instance方法或者instance变量。

到此,关于"Java中Null的知识有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

类型 变量 方法 指针 静态 代码 时候 编译 错误 运行 知识 这是 学习 程序 程序员 编译器 问题 装箱 输出 重要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 互联网和科技创新 远拓互联网科技 互联网科技缩写 新华互联网科技校企合作 银川新华互联网科技学校地址 上海电发互联网科技有限公司 互联网之后的科技是什么 汽车互联网创新科技园 智腾互联网科技有限公司 搜狐科技互联网 电子科技大学互联网创业大赛 中国科技创新与世界互联网大会 威龙国际互联网科技公司 元气玛特互联网科技公司是外包吗 互联网科技平台产品运营 北京互联网科技类企业分布 互联网科技对化妆品行业 优雇互联网科技有限公司 银川新华互联网科技学校招聘 互联网科技海报 互联网电商科技 涨乐互联网科技 狮子座互联网科技有限公司 火传媒上海互联网科技 成都仁贤领冠互联网科技有限公司 互联网科技实习生岗位职责 恒生互联网科技指数跳水 互联网科技快讯热点 南京一网一红互联网科技有限公司
0