博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java -运算符+引起的NullPointerException
阅读量:4095 次
发布时间:2019-05-25

本文共 957 字,大约阅读时间需要 3 分钟。

编写的代码在uat运行,发现发生NPE。经检查,确定是运算符+引起的,这让我匪夷所思,但接下来的代码验证了我的猜想:

/** * @author Virgil.Wang */public class AddSymbolTest {
public static void main(String[] args) {
Integer m = 10; Integer n = null; System.out.println(m); System.out.println(n); System.out.println(m + n); }}

输出结果

10nullException in thread "main" java.lang.NullPointerException	at edu.virigl.other.AddSymbolTest.main(AddSymbolTest.java:13)Process finished with exit code 1

结论,在进行包装类型,如Integer,Long等保障类型想加时,除了保证对象非空外,还要保证对象中的包装类型的属性不能为空。推荐做法如下:

public static void main(String[] args) {
Integer m = 10; Integer n = null; System.out.println(m); System.out.println(n); // FIXME 修改后的做法 System.out.println((m == null ? 0 : m) + (n == null ? 0 : n)); }

原因分析

Java在运算时,应该是以基本数据类型进行运算操作的(未找到相关的文档说明)。在两个Integer对象想加时,虚拟机隐式的调用Integer#intValue()Integer对象转向转换为int类型。当Integer对象为空时,intValue()会抛出NullPointerException

转载地址:http://pjxii.baihongyu.com/

你可能感兴趣的文章
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
查看>>
(python版)《剑指Offer》JZ30:连续子数组的最大和
查看>>
(python版)《剑指Offer》JZ32:把数组排成最小的数
查看>>
(python版)《剑指Offer》JZ02:替换空格
查看>>
JSP/Servlet——MVC设计模式
查看>>
使用JSTL
查看>>
Java 8新特性:Stream API
查看>>
管理用户状态——Cookie与Session
查看>>
最受欢迎的前端框架Bootstrap 入门
查看>>
JavaScript编程简介:DOM、AJAX与Chrome调试器
查看>>
通过Maven管理项目依赖
查看>>
通过Spring Boot三分钟创建Spring Web项目
查看>>
Spring的IoC(依赖注入)原理
查看>>
Guava快速入门
查看>>
Java编程基础:static的用法
查看>>
Java编程基础:抽象类和接口
查看>>
Java编程基础:异常处理
查看>>
Java编程基础:了解面向对象
查看>>