二十九、JavaSE----关于null的处理方式

简介: 二十九、JavaSE----关于null的处理方式

对于Java程序员来说,空指针一直是恼人的问题,我们在开发中经常会受到NullPointerException的蹂踽和壁咚。


       那么关于null,你应该知道下面这几件事情来有效的了解null,从而避免很多由null引起的错误。


1.大小写敏感

2.null是任何引用类型的初始值

3.null既不是对象也不是类型,它是一种特殊的值,你可以将它赋值给任何引用数据类型

4.null不能赋值给基本数据类型

5.将null赋值给包装类,自动拆包会报NPE

6.带有null的引用类型变量,instanceof会报false

7.静态变量为null,调用静态方法不会抛出NPE

8.使用null值安全的方法

9.使用==或!=判断null


大小写敏感



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

1.png

        这个问题已经几乎不会出现,因为eclipse和Idea编译器已经给出了编译器提示,所以基本不用去考虑这个问题。


null是任何引用类型的初始值



       null是所有引用类型的默认值,Java中的任何引用变量都将nulI作为默认值,也就是说所有Object类下的引用类型默认值都是null。这对所有的引用变量都适用。就像是基本类型的默认值一样,例如int的默认值是0, boolean的默认值是false。


下面是基本数据类型的初始值


类型

初始值
boolean false
char /u0000
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d


null只是一种特殊的值


       null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将它赋予任何类型,你可以将null转换为任何类型。


2.png


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


null只能赋值给引用变量,不能赋值给基本类型变量。


       持有null的包装类在进行自动拆箱的时候,不能完成转换,会抛出空指针异常,并且null也不能和基本数据类型进行对比


3.png


使用了帯有null值的引用类型变量,instance  of 操作会返回false


4.png


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


静态变量为null调用静态方法不会抛出NullPointerException。因为静态方法使用了静态绑定。


使用Null-Safe方法


       你应该使用null-safe安全的方法,java类库中有很多工具类都提供了静态方法,例如基本数据类型的包装类,Integer , Double等。例如:


5.png


        number没有赋值,所以默认为null,使用String.value(number)静态方法没有抛出空指针异常, 但是使用toString却抛出了空指针异常。所以尽量使用对象的静态方法。



null判断


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


6.png


关于思维导图


常用的Java工具包的思维导图汇总如下:


Java.IO、

7.png


Java.lang

8.png


Java.math

9.png


Java.net

10.png

相关文章
|
7天前
|
人工智能 缓存 安全
codIng plan升级版,阿里云百炼 Token Plan 上线:告别 API 计费焦虑,多模型统一订阅制来了
阿里云百炼Token Plan是面向企业与开发者的AI大模型订阅服务,以包月制+统一Credits积分计费,支持Qwen、GLM、DeepSeek等多模型灵活调用及OpenClaw、Qwen Code等主流工具,兼顾安全、稳定与预算可控。
|
2月前
|
存储 安全 数据库
阿里云服务器2核4G配置最新价格:不同实例收费标准和最新活动价格及选择参考
阿里云服务器2核4G配置提供近二十种实例规格,涵盖经济型e、通用算力型u1/u2a、计算型c9i等,满足从个人轻量应用到企业级计算密集型场景的需求。不同实例在架构、性能、适用场景及价格上有所差异,如经济型e适合轻量级应用,通用算力型u2a性价比高,计算型c9i适合高性能计算。用户可根据业务特性、预算及长期成本规划,选择最适合的实例规格。
1540 8
|
5月前
|
人工智能 UED
2025年数字人全链路智能创作平台完全指南
AI数字人成内容创作新利器!本文解析必火三大技术引擎、分钟级克隆、低成本高效产出,并对比2025年主流平台,助你三步选对工具,赋能电商、培训与自媒体。
|
8月前
|
存储 供应链 前端开发
如何开发供应商管理系统中的物料管理板块(附架构图+流程图+代码参考)
供应商管理系统中的物料管理板块是企业供应链管理的核心部分,涉及物料采购、库存、资质及价格管理。它通过标准化、自动化管理,降低采购成本,提高供应链透明度与合规性,确保企业物资供应稳定、高效。本文详细解析物料管理的架构设计、核心功能与业务流程,并提供代码示例与开发技巧,助力企业快速构建高效物料管理系统。
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
1488 3
|
Kubernetes 监控 API
在K8S中,什么是 Minikube、Kubectl、Kubelet?
在K8S中,什么是 Minikube、Kubectl、Kubelet?
|
缓存 前端开发 JavaScript
高效开发现代 Web 应用:从前端到后端的最佳实践
在开发现代 Web 应用时,前端和后端技术的选择对项目的性能、可维护性和用户体验至关重要。本文将探讨如何通过现代工具和框架来优化前端和后端开发流程。我们将分析前端技术(如 React 和 Vue.js)与后端技术(如 Node.js 和 Django)的集成,并提供实际案例来展示如何实现高效开发。无论是对新手还是经验丰富的开发者,本指南都提供了宝贵的洞见和实用的技巧,以帮助提高开发效率并构建出色的 Web 应用。
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
240 0
|
数据采集 存储 监控
数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第10章参考数据和主数据篇
数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第10章参考数据和主数据篇
344 0
|
SQL Java 数据库连接
springboot实现添加用户到数据库的功能
springboot实现添加用户到数据库的功能