自动拆箱时遇到的NPE问题
目录
什么是自动拆箱
遇到的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问题相关推荐
- java自动拆箱时的nullPointException问题解析
java1.5之后提供的自动装箱和拆箱操作,简化了代码的编写,但是自动拆箱过程中容易引起nullPointExcetion.如果对其拆箱原理不理解将对很定位问题出现的原因. 原因: 例如如下代码: p ...
- java的自动拆箱会发生NPE
平时的小细节,总能在关键时刻酿成线上事故,最近在代码中使用了Integer的自动拆箱功能,结果NPE(NullPointException)了,悲剧啊... 一.何为自动拆箱 要说自动拆箱,就必须说自 ...
- 可能你不知道的,关于自动装箱和自动拆箱
包装类 我们知道,Java中包含了8种基本数据类型: 整数类型:byte.short.int.long 字符类型:char 浮点类型:float.double 布尔类型:boolean 这8种基本数据 ...
- java中的自动拆箱和装箱(以及NEP问题)
java中的自动拆箱和装箱 1.回顾知识点 java中的8种基本数据类型,可以分为三类 字符类型 char 布尔类型 boolean 整数类型 byte , short , int , long 浮点 ...
- Java进阶之自动拆箱与自动装箱
序. java基本类型介绍 java中,基本数据类型一共有8种,详细信息如下表: 类型 大小 范围 默认值 byte 8 -128 - 127 0 short 16 -32768 - 32768 0 ...
- java装箱和拆箱的意义_java的自动拆箱和装箱是每个程序员都要知道的
自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西. 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动 ...
- 自动装箱和自动拆箱实现原理!
什么是自动装箱和拆箱 自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱. ...
- java-自动装箱和自动拆箱
一.简述 自动装箱和自动拆箱是两个相反的过程,自动装箱即将基本数据类型转换为对应的封装类,自动拆箱即将封装类转换为对应的基本数据类型.此外,装箱的过程会增加内存的消耗,影响性能,因为这个过程会创建 ...
- java三元表达式因自动拆箱导致的NPE问题
开发中发生的奇怪的问题,类似如下的代码NPE了... boolean flag = false; Integer a = null; Integer n = flag ? 1 : a; 原来是在计算三 ...
最新文章
- 0基础学python难吗-零基础入门学习Python技术难不难?
- 基于Bootstrap的jQuery开关按钮插件
- URLEncoder和URLDecoder(乱码处理)
- Linux命令行–基本的bash shell命令
- WaitForMultipleObject与MsgWaitForMultipleObjects用法
- 15拆分成3个不同的自然数_15个小时搜救破拆,他磨破3双手套营救出4个生还者...
- 移动端隐藏滚动条(最全面)
- 2017.9.18 calc 失败总结
- mysql-基本操作
- SQL 存储过程封装代码生成器
- 最新好用的服装零售进销存软件排行榜
- SSH攻击ip列表【不定时更新】
- ubuntu安装与卸载deb文件
- 参考文献中英文人名的缩写规则
- 可能是最全的|适合决策AI研究的自动驾驶模拟器评测(下篇)
- 内容制作新纪元:AIGC技术的革命性影响
- Python中Pickle库
- pvid与vid详解
- mysql 日期查询下周,MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据【转】...
- 最土团购修改短信接口
热门文章
- 程序员不能不懂数据存储
- 刺激战场灵敏度凭手感?全网通用十套灵敏度分享,总有一款适合你
- 在线浏览PDF:Grapecity Documents for PDF Viewer 6.0.2
- linux下vhd win10,VHD双系统(windows10)
- php工程导致系统蓝屏,为什么电脑总是蓝屏
- 叩丁狼分享—培训实战教程之浅谈过滤器Filter
- 【实用篇】Python 编码风格与规范
- 阿里搞大事!突然宣布! 滴滴危险了......
- 基于Qsys的SDRAM控制器
- Word插入两段页码,给Word文档分节