网站首页 > 技术文章 正文
对于Java程序员来说,空指针一直是恼人的问题,我们在开发中经常会受到NullPointerException的蹂躏和壁咚。Java的发明者也承认这是一个巨大的设计错误。
那么关于null,你应该知道下面这几件事情来有效地了解null,从而避免很多由null引起的错误。
大小写敏感
首先,null是Java中的关键字,像是public.、static、final。它是大小写敏感的,你不能将null写成Null或NULL,编辑器将不能识别它们然后报错。
public class AccessModifierNull{
Object object = Null ;
Object object1 = null ;
}
这个问题已经几乎不会出现,因为eclipse和Idea编译器已经给出了编译器提示,所以你不用考虑这个问题。
null是任何引用类型的初始值
null是所有引用类型的默认值,Java中的任何引用变量都将null作为默认值,也就是说所有Object类下的引用类型默认值都是null。这对所有的引用变量都适用。就像是基本类型的默认值- -样,例如int的默认值是0,,boolean的默认值是false。
下面是基本数据类型的初始值
null只是一种特殊的值
null既不是对象也不是一种类型, 它仅是-种特殊的值,你可以将它赋:予任何类型,你可以将null转换为任何类型。
public static void main(String[] args) {
String str = null;
Integer itr = null;
Double dou = null;
Integer integer = (Integer) null;
String string = (String)null;
System.out.printIn("integer =”+ integer);
System.out.println("string =”+ string);
}
你可以看到在编译期和运行期内,将null转换成任何的引用类型都是可行的,并且不会抛出空指针异常。
null只能赋值给引用变量,不能赋值给基本类型变量。
持有null的包装类在进行自动拆箱的时候,不能完成转换,会抛出空指针异常,并且null也不能和基本数据类型进行对比。
public static void main(String[] args) {
int i =0;
Integer itr = null;
System.out.println(itr == i);
}
使用了带有null值的引用类型变量,instanceof操作会返回false。
public static void main(String[] args) {
Integer isNull = null;
// instanceof = isInstance 方法
if(isNull instanceof Integer){
System.out.printIn("isNull is instanceof Integer");
}else{
System.out.println("isNull is not instanceof Integer");
}
这是instanceof操作符一个很重要的特性,使得对类型强制转换检查很有用。
静态变量为null调用静态方法不会抛出NullPointerException。因为静态方法使用了静态绑定。
使用Null-Safe方法
你应该使用nll-safe安全的方法,java类库中有很多工具类都提供了静态方法,例如基本数据类型的包装类,Integer,Double等。例如
public class NullSafeMethod {
private static String number;
public static void main(String[] args) {
String s = String . valueOf( number);
String string = number.toString();
System.out.printIn("s ="+ s);
System.out.println("string ="+ string);
}
}
number没有赋值,所以默认为null,使用String.value(number)静态方法没有抛出空指针异常,
但是使用toString()却抛出了空指针异常。所以尽量使用对象的静态方法。
null判断
你可以使用==或者!=操作来比较null值,但是不能使用其他算法或者逻辑操作,例如小于或者大于。跟SQL不一样,在Java中null == null将返回true,如下所示:
public class CompareNull {
private static String str1;
private static String str2;
public static void main(String[] args) {
System.out.println("str1 == str2 ?"+ str1 == str2);
System.out.println(null == null);
}
}
如果需要文档版请在评论区扣666,后台私我哦~
猜你喜欢
- 2025-05-27 Python进阶 - day1:深入理解数据结构
- 2025-05-27 Java中transient字段的作用
- 2025-05-27 深度学习数据集处理常用函数示例(Python)
- 2025-05-27 Go语言-指针
- 2025-05-27 什么是 happens-before 规则?
- 2025-05-27 Python 中常用的数据结构,帮助你从基础到精通
- 2025-05-27 1、数值类型
- 2025-05-27 基础函数20例,案例解读,再不掌握就真的Out了
- 2025-05-27 12 个 C# 提效实用干货
- 2025-05-27 Java中数组的声明和初始化方法
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 1524℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 662℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 528℃MySQL service启动脚本浅析(r12笔记第59天)
- 494℃启用MySQL查询缓存(mysql8.0查询缓存)
- 493℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 481℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 463℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 461℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)