java中的自动拆箱和装箱(以及NEP问题)
java中的自动拆箱和装箱
1.回顾知识点
java中的8种基本数据类型,可以分为三类
- 字符类型
char
- 布尔类型
boolean
- 整数类型
byte , short , int , long
- 浮点数类型
float , double
2.基本数据类型的优点
这种数据的变量不需要使用new创建,他们不会在堆上创建,而是直接在栈内存中存储,因此会更加高效。
3.基本类型对应的包装类型
基本数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double
3.为什么使用包装类型
(1)在集合类中,我们是无法将int 、double等类型放进去的。因为集合的容器要求元素是Object类型。
(2) java是面向对象的语言
4.自动拆箱和自动装箱
自动装箱: 就是将基本数据类型自动转换成对应的包装类。
自动拆箱:就是将包装类自动转换成对应的基本数据类型。
Integer i =10; //自动装箱
int b= i; //自动拆箱
5.自动装箱与自动拆箱的实现原理
- 实际代码
public static void main(String[]args){Integer integer=1; //装箱int i=integer; //拆箱
}
- 反编译后的代码
public static void main(String[]args){Integer integer=Integer.valueOf(1); int i=integer.intValue();
}
6.java中==和equals的坑
结论:
在Java中,==比较的是对象应用,而equals比较的是值。
示例代码
public static void main(String... strings) {Integer integer1 = 3;Integer integer2 = 3;if (integer1 == integer2)System.out.println("integer1 == integer2");elseSystem.out.println("integer1 != integer2");Integer integer3 = 300;Integer integer4 = 300;if (integer3 == integer4)System.out.println("integer3 == integer4");elseSystem.out.println("integer3 != integer4");}
打印结果:
integer1 == integer2
integer3 != integer4
原因:
**原因就和Integer中的缓存机制有关。**在Java 5中,在Integer的操作上引入了一个新功能来节省内存和提高性能。整型对象通过使用相同的对象引用实现了缓存和重用。
适用于整数值区间-128 至 +127。
7.自动拆箱带来的问题
NEP问题
- 示例代码
@Testpublic void testNEP1() {Integer i = null;System.out.println(i);}
控制台打印: null
@Testpublic void testNEP2() {Integer i = null;int ii = i;System.out.println(ii);}
空指针异常NullPointerException
说明:
有些场景会进行自动拆装箱,同时也说过,由于自动拆箱,如果包装类对象为null,那么自动拆箱时就有可能抛出NPE。
如果一个for循环中有大量拆装箱操作,会浪费很多资源。
如何选择
摘自阿里java开发手册
关于基本数据类型与包装数据类型的使用标准如下:
1) 【强制】所有的 POJO 类属性必须使用包装数据类型。
2) 【强制】RPC 方法的返回值和参数必须使用包装数据类型。
3) 【推荐】所有的局部变量使用基本数据类型。
java中的自动拆箱和装箱(以及NEP问题)相关推荐
- 如何理解Java中的自动拆箱和自动装箱?
小伟刚毕业时面的第一家公司就被面试官给问住了,记忆尤深啊- 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这-这-知识盲区- 回到家后小伟赶紧查资料,我透,这不就 ...
- 如何理解Java自动装箱_如何理解Java中的自动拆箱和自动装箱?
如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不就是问基本类型跟封装类型吗,面试官整啥名词呢... ...
- Java中的自动拆箱装箱(AutoboxingUnboxing)
一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...
- 一文读懂什么是Java中的自动拆装箱
本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...
- java integer valueof_一文读懂什么是Java中的自动拆装箱
本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...
- [转载] 什么是Java中的自动拆装箱 integer
参考链接: Java中autoboxing自动装箱整数对象的比较 本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 1.基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class ...
- Java进阶之自动拆箱与自动装箱
序. java基本类型介绍 java中,基本数据类型一共有8种,详细信息如下表: 类型 大小 范围 默认值 byte 8 -128 - 127 0 short 16 -32768 - 32768 0 ...
- java装箱和拆箱的意义_java的自动拆箱和装箱是每个程序员都要知道的
自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西. 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动 ...
- java double 装箱_Java自动拆箱和装箱
一.什么是装箱/拆箱 在讲之前,得先提一下为什么两个概念:基本数据类型及其包装类,我们都知道Java是一种面向对象的语言,但是Java中的基本数据类型是不面向对象的,这时在使用中便会存在诸多的不便,为 ...
最新文章
- MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)
- mysql workbench中删除数据表记录提示出错的问题
- android webview tel:,Android WebView“tel:”和“mailto:”链接显示未找到网页
- mysql大规模读写性能_十招搞定 MySQL 大规模数据库的性能和伸缩性优化
- vue json 导出 excel
- jena 学习思路(转)
- Problem - 6111迷宫出逃
- 模块开发卷宗(GB8567——88)
- go将服务器图片响应给客户端,Go中来自客户端和服务器的RPC
- 刷recovery工具apk_红米note4X刷lineage,不喜欢miui10广告臃肿的可以试一试
- selenium2 webdriver要点理解
- [Spring实战系列](8)Spring注入方式之setter注入
- IDEA→编码设置、JDK设置、快捷方式、运行项目、debug、关联git、关联maven、mybatis跳转plugin
- 因为链接服务器 IP 的 OLE DB 访问接口 SQLNCLI 无法启动分布式事务
- JavaScript上传文件,不打断点就上传失败
- 服装打版软件ET2019淘宝100RMB买的
- 使用 mongorestore恢复数据以及使用 Studio 3T GUI 管理数据库
- 下班之后,回个毛线的工作消息!
- 用Java实现I am a student逆序输出为student a am I,不借助split方法和StringBuffer!
- Javaweb项目报告
热门文章
- 2023最新51单片机毕设选题推荐
- html5 自建工作流,flowable可视化工作流设计器,html5工作流设计器,vue版本工作流...
- linux上的社交软件下载,探探交友app免费版-探探交友真实app下载v4.2.9.2-Linux公社...
- POJ - 1376 Robot
- 2021年BATJ30套大厂Android经典高频面试题,使用指南
- 丢失的牛AcWing
- 6360: 词韵(字典树,DP)
- 清华山维eps提示计算机内存不足,系统提示“内存不足”的原因及解决方法
- CoreAnimation余下的链接
- Mixamo动作库导入UE4,动画重定向到小白人骨架