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。

举例

Integer != 0//NPE

原因:Integer是int的包装类,在与int做条件判断时,Integer会进行拆箱(转化为int),此时如果Integer为null就会出现NullPointerException,包括其他基本数据类型也是如此,因此在使用基本数据类型的包装类与基本数据类型做条件判断时,一定要先判断该包装类是否为NULL

假设我们现在有一个类,例如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(之前的)。这样就可以尽量避免空指针错误,平时多注意,养成习惯,防止日后埋下隐患。

mysql npe问题_基本类型、引用类型NPE异常相关推荐

  1. mysql获取时间_时间类型_时间格式化

    为了方便在数据库中存储日期和时间,MySQL提供了表示日期和时间的数据类型,分别是YEAR.DATE.TIME.DATETIME和TIMESTAMP.如下表列举了这些MySQL中日期和时间数据类型所对 ...

  2. C#基础_值类型引用类型(十一)

    值类型和引用类型: 值类型包括:byte,short,int,long,char,float,double,bool,struct结构 引用类型包括:类类型,接口类型和数组 等. 值类型和引用类型特点 ...

  3. mysql tostring函数_各种类型转换为字符串类型(ToString())

    // C# 日期格式 DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString() ...

  4. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  5. linux mysql date 格式_关于MySQL中的三种日期类型

    最近遇到两次插入日期类型后,数值为 0000-00-00 00:00:00 的情况,于是查了一下官方文档,找到了原因. MySQL中我们经常用来存储日期的数据类型有三种:Date.Datetime.T ...

  6. mysql 获取结果_【原创】7. MYSQL++中的查询结果获取(各种Result类型)

    在本节中,我将首先介绍MYSQL++中的查询的几个简单例子用法,然后看一下mysqlpp::Query中的几个与查询相关的方法原型(重点关注返回值),最后对几个关键类型进行解释. 1. MYSQL++ ...

  7. mysql double 存储_关于MYSQL中FLOAT和DOUBLE类型的存储-阿里云开发者社区

    关于MYSQL中FLOAT和DOUBLE类型的存储 重庆八怪 2016-04-12 844浏览量 简介: 关于MYSQL中FLOAT和DOUBLE类型的存储 其实在单精度和双精度浮点类型存储中其存储方 ...

  8. mediumblob mysql_「mediumblob」MySql MediumBlob——MySql的Bolb四种类型 - seo实验室

    mediumblob mysql中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据.BLOB类型实际是个类型系列(TinyBlob.Blob.mediumBlob. ...

  9. mysql 时间推移_随着时间的推移可视化COVID-19新案例

    mysql 时间推移 This heat map shows the progression of the COVID-19 pandemic in the United States over ti ...

最新文章

  1. swiftswift3.0自己封装的快速构建页面的方法
  2. 干掉 ZooKeeper?阿里为什么不用 ZK 做服务发现?
  3. Python 之 matplotlib (三)坐标轴
  4. php捕获Fatal error错误与异常处理
  5. Nature年度十大杰出论文公布:机器狗算法、近室温超导等入选,复旦中科院上榜...
  6. Android的跨进程通信
  7. php扩展实现hook,ThinkPHP3.2 扩展(钩子,HOOK)
  8. F# -- TCP/IP小测试
  9. iOS9定位获取经纬度 swift
  10. Python中文编码问题详解
  11. Python稳基修炼之计算机等级考试易错概念题2(含答案与解析)
  12. python动态加载模块有什么用_人生苦短我用python(02)动态加载模块
  13. SSH框架总结(框架分析+环境搭建+实例源码下载
  14. linux 查看端口、进程情况及kill进程
  15. SpringCloud-Alibaba之Nacos,Java集合面试题及答案
  16. python编写程序、一个富翁与陌生人做交易_智慧职教云课堂Python程序设计(常州工业职业技术学院)题目答案...
  17. 谁在叩响野蛮人的家门?
  18. 学习编程,应该从哪里开始学习呢?
  19. 武 学院2017级计算机专业,关注 | 计算机学院2017级新生见面会暨军训动员会顺利举行...
  20. U盘偷资料神器,我都不太敢分享了。

热门文章

  1. java基础:继承的使用
  2. Java开发篇——设计模式(4)先生需要代购吗?
  3. 可软可硬,让人舒服到尖叫!这款伸缩自如的旅行枕让你三分钟入睡,除了拯救你的睡眠,还能拯救你的颈椎!太赞了!...
  4. 这所与阿里巴巴有关的大学,计算机专业课也变了!
  5. HTML的表单元素(整理)
  6. Centos6配置在线yarm源 Centos6 网易源阿里源都失效用不了的解决方法
  7. django注册发送邮箱激活账号
  8. redis源码修改之zincrby,hincrby命令
  9. 简单的防止Windows自动锁屏的VBS脚本
  10. mysql数据库层级关系图_层次关系数据库表的设计