目录

什么是自动拆箱

遇到的NPE问题

问题原因

总结

什么是自动拆箱

拆箱:是将包装类型转换为基本数据类型

遇到的NPE问题

这里有一个简单的Person类,只有姓名和年龄的属性和get(),set()方法

public class Person {String name;Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

测试类

public class Main{public static void main(String[] args) {//正常情况Person person1 = new Person();person.age=10;System.out.println(ifChilder(person1));//非正常情况Person person2 = new Person();System.out.println(ifChilder(person2));}private static boolean ifChilder(Person person) {if (person != null){if (person.age < 16){return true;}}return false;}
}

运行之后

true
Exception in thread "main" java.lang.NullPointerExceptionat Main.ifChilder(Main.java:17)at Main.main(Main.java:12)

person1对象没有发生异常,但是person2对象发生了异常

首先我们先排除person2对象为空的异常,因为在ifChildern()方法中,我们判断了person2是否为空,也就是说,出现问题的是这一行代码

 if (person.age < 16){return true;}

追溯到前面也就是,这一行代码有异常

 System.out.println(ifChilder(person2));

问题原因

因为自动拆箱调用的是XXXValue()方法,在源码中

public int intValue() {return value;}

返回的是包装类对象的值,但是person2我们没有给他的age赋值,所以发生了NPE

总结

自动拆箱时由于调用的是intValue方法,所以如果调用方本身是null的话,肯定会NPE。我们需要在测试的时候可以咋自动拆箱的地方进行判断,来避免NPE

自动拆箱时遇到的NPE问题相关推荐

  1. java自动拆箱时的nullPointException问题解析

    java1.5之后提供的自动装箱和拆箱操作,简化了代码的编写,但是自动拆箱过程中容易引起nullPointExcetion.如果对其拆箱原理不理解将对很定位问题出现的原因. 原因: 例如如下代码: p ...

  2. java的自动拆箱会发生NPE

    平时的小细节,总能在关键时刻酿成线上事故,最近在代码中使用了Integer的自动拆箱功能,结果NPE(NullPointException)了,悲剧啊... 一.何为自动拆箱 要说自动拆箱,就必须说自 ...

  3. 可能你不知道的,关于自动装箱和自动拆箱

    包装类 我们知道,Java中包含了8种基本数据类型: 整数类型:byte.short.int.long 字符类型:char 浮点类型:float.double 布尔类型:boolean 这8种基本数据 ...

  4. java中的自动拆箱和装箱(以及NEP问题)

    java中的自动拆箱和装箱 1.回顾知识点 java中的8种基本数据类型,可以分为三类 字符类型 char 布尔类型 boolean 整数类型 byte , short , int , long 浮点 ...

  5. Java进阶之自动拆箱与自动装箱

    序. java基本类型介绍 java中,基本数据类型一共有8种,详细信息如下表: 类型 大小 范围 默认值 byte 8 -128 - 127 0 short 16 -32768 - 32768 0 ...

  6. java装箱和拆箱的意义_java的自动拆箱和装箱是每个程序员都要知道的

    自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西. 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动 ...

  7. 自动装箱和自动拆箱实现原理!

    什么是自动装箱和拆箱 自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱. ...

  8. java-自动装箱和自动拆箱

    一.简述   自动装箱和自动拆箱是两个相反的过程,自动装箱即将基本数据类型转换为对应的封装类,自动拆箱即将封装类转换为对应的基本数据类型.此外,装箱的过程会增加内存的消耗,影响性能,因为这个过程会创建 ...

  9. java三元表达式因自动拆箱导致的NPE问题

    开发中发生的奇怪的问题,类似如下的代码NPE了... boolean flag = false; Integer a = null; Integer n = flag ? 1 : a; 原来是在计算三 ...

最新文章

  1. 0基础学python难吗-零基础入门学习Python技术难不难?
  2. 基于Bootstrap的jQuery开关按钮插件
  3. URLEncoder和URLDecoder(乱码处理)
  4. Linux命令行–基本的bash shell命令
  5. WaitForMultipleObject与MsgWaitForMultipleObjects用法
  6. 15拆分成3个不同的自然数_15个小时搜救破拆,他磨破3双手套营救出4个生还者...
  7. 移动端隐藏滚动条(最全面)
  8. 2017.9.18 calc 失败总结
  9. mysql-基本操作
  10. SQL 存储过程封装代码生成器
  11. 最新好用的服装零售进销存软件排行榜
  12. SSH攻击ip列表【不定时更新】
  13. ubuntu安装与卸载deb文件
  14. 参考文献中英文人名的缩写规则
  15. 可能是最全的|适合决策AI研究的自动驾驶模拟器评测(下篇)
  16. 内容制作新纪元:AIGC技术的革命性影响
  17. Python中Pickle库
  18. pvid与vid详解
  19. mysql 日期查询下周,MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据【转】...
  20. 最土团购修改短信接口

热门文章

  1. 程序员不能不懂数据存储
  2. 刺激战场灵敏度凭手感?全网通用十套灵敏度分享,总有一款适合你
  3. 在线浏览PDF:Grapecity Documents for PDF Viewer 6.0.2
  4. linux下vhd win10,VHD双系统(windows10)
  5. php工程导致系统蓝屏,为什么电脑总是蓝屏
  6. 叩丁狼分享—培训实战教程之浅谈过滤器Filter
  7. 【实用篇】Python 编码风格与规范
  8. 阿里搞大事!突然宣布! 滴滴危险了......
  9. 基于Qsys的SDRAM控制器
  10. Word插入两段页码,给Word文档分节