Java中equals方法造成空指针异常的原因及解决方案
来源:互联网 发布:杭州汉聚网络老板 编辑:程序博客网 时间:2024/05/14 19:07
前言
博主最近在做一个项目的调试工作,期间遇到了一个会导致抛出空指针异常的小问题,说它是小问题,是因为真的只是在写代码的时候注意一下就好了,但是这里还要写一个博客,就是为了剖析这个问题,然后给自己做个备忘,也给看博客的各位提个醒。
正文
bug描述
当查找已修改的与未修改的做比较的时候,之前为null的值调用equals方法与其他值做比较的时候,会导致抛出空指针异常
知识补充
关于null,你不得不知道的几件事:
1、null是Java中的关键字,像public、static、final。它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错。
2、就像每种原始类型都有默认值一样,如int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。就像你创建了一个布尔类型的变量,它将false作为自己的默认值,Java中的任何引用变量都将null作为默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量(但当你使用一个没有初始化的局部变量,编译器会警告你)。为了证明这个事实,你可以通过创建一个变量然后打印它的值来观察这个引用变量。
3、null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型。
4、null可以赋值给引用变量,你不能将null赋给基本类型变量,例如int、double、float、boolean。如果你那样做了,编译器将会报错。
5、任何含有null值的包装类在Java拆箱生成基本数据类型时候都会抛出一个空指针异常。(例如Integer拆箱成int时)
6、如果使用了带有null值的引用类型变量,instanceof操作将会返回false。(instanceof:用来在运行时指出对象是否是特定类的一个实例,例如:Integer num = null,那么,调用 num instanceof Integer时会返回false)
7、不能调用非静态方法来使用一个值为null的引用类型变量,它将会抛出空指针异常;可以使用静态方法来使用一个值为null的引用类型变量,因为静态方法使用静态绑定,不会抛出空指针异常。
8、你可以使用==或者!=操作来比较null值,但是不能使用其他算法或者逻辑操作,例如小于或者大于。跟SQL不一样,在Java中null==null将返回true。
举例
假设我们现在有一个类,例如String,对于如下代码:
String str = null;if (str.equals("Hello World!")){ System.out.println("Yes");}else { System.out.println("No");}
就会抛出空指针异常,但是,如果我们把第二行的条件判断改为:
if ("Hello World!".equals(str))
就不会抛出空指针异常,因为String的equals方法不是Static方法
反思
为了避免内存溢出,我们在无需类外调用的方法前,一般不加static关键字(因为静态方法会常驻内存,其生存周期与整个项目的生存周期是一致的)所以,我们应该在为变量赋初值的时候,尽量不要使用null来赋初值,如果一定是null作为初值的情况,那么在进行操作时,一定要先 Assert.isNull 一下,尽量避免对null进行操作。回到equals方法上,如果一个初值可能为空的对象实例,调用equals方法时,一定要遵循 “常量”.equals(变量) 或者 后输入的.equals(之前的)。这样就可以尽量避免空指针错误,平时多注意,养成习惯,防止日后埋下隐患。
- Java中equals方法造成空指针异常的原因及解决方案
- 写错equals方法引起的空指针异常
- equals方法出现空指针异常
- Java Objects.equals()的作用---避免空指针异常
- 空指针异常的原因
- java 编程中遇到空指针异常的可能原因java.lang.nullpointerexception
- java 空指针异常其他原因
- getServletContext()空指针异常的原因
- 空指针异常可能出现的原因
- 空指针异常的原因分析
- 在Activity的onCreate方法中显示PopupWindow导致异常的原因分析及解决方案
- 在Activity的onCreate方法中显示PopupWindow导致异常的原因分析及解决方案
- 在Activity的onCreate方法中显示PopupWindow导致异常的原因分析及解决方案
- 在Activity的onCreate方法中显示PopupWindow导致异常的原因分析及解决方案
- android布局出现nullpoint空指针异常及cast转换异常的原因
- 关于springmvc报的空指针的异常,就是在这个service方法报空指针的原因
- 打印空引用不会报空指针异常的原因
- Mybatis中selectOne方法存在的坑 空指针异常
- SSD(single shot multibox detector)算法及Caffe代码详解
- JNA调用VC++代码
- python基础笔记-5
- 字符串中不重复的单词个数
- ES6之Module的语法(1)
- Java中equals方法造成空指针异常的原因及解决方案
- 常用头文件和函数
- Android 系统自带模糊图像算法,获取状态栏、标题栏高度
- Linux shell常用基本命令(二)
- Android 图片移动和拖动
- 【TensorFlow】DNNRegressor 的简单使用
- 知名Html5 Canvas Javascript库对比
- HTML5利用FormData对象实现显示进度条的文件上传【转】
- 有趣又有料:任意操控静态图片中人的眼球