基本与包装类型全面对比
基本类型与包装类型的区别
- 前言
- 区别
前言
java的每个基本类型都对应一个包装类型,比如说,java的int类型包装类型为Integer,double的包装类型是Double.基本类型和包装类型的区别主要有一下5点:
区别
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- **包装类型可以为null,而基本类型不可以:**被小看这一点,它使得包装类型可以应用到POJO中,而基本类型则不行
POJO是什么? 这里稍微说明一下.
POJO是的英文全称(Plain Ordinary Java Object)翻译一下就是简单无规则的Java对象,只属于字段以及setter和getter方法,和POJO类似的,还有数据传输对象DTO(Data Transfer Object,泛指用于展示层与服务层之间的数据传输对象),视图对象VO(View Object,把某个页面的数据封装起来),持久化对象PO(Persistant Object,可以看成是与数据库中的表映射的Java对象);那为什么Pojo的属性必须用包装类型呢?–><<阿里巴巴java开发手册>>上详细的说明:数据库的查询结果可能为null,如果使用基本数据类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把Integer对象转换成int值),就会抛出NullPointerException的异常); - 包装类型可用于泛型,而基本类型不可以: 泛型不能使用基本类型,因为使用基本类型是会编译出错
例如:listlist=new ArrayList<> -->是错误的 List<Integer(只能是包装类型)>list=new ArrayList<>();
为什么呢? 因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是Object类及其子类—基本类型是个特列; - 基本类型比包装类型更高效: 基本类型在栈(zhan)中直接存储的具体数值,而包装类型则存储的是堆中的引用。很显然,相比较于基本类型而言,包装类型需要占用更多的内存空间.假如没有基本类型的话,对于数值这类经常使用到的数据来说,每次都要通过new一个包装类型就显得笨重;
- 两个包装类型的值可以相同,但却不相等: 两个包装类型的值可以相同,但却不相等—这句话怎么理解?来看一段代码就明明白白了.
Integer chenmo=new Integer(10) Integer wanger=new Integer(10)
System.out.println(chenmowanger);//false System.out.println(chenmo.equals(wanger));//true
两个包装类型在使用"进行判断的时候,判断的是其指向的地址是否相等.chenmo和wanger两个变量使用new关键字,导致它们在"“的时候输出为false.而chenmo.equals(wanger)的输出结果
为true,是因为equals方法内部比较的是两个int值是否相等.
瞧,虽然chenmo和wanger的值都是10,但是他们并不相等.换句话说就是"将”==“操作符应用于包装类型比较的时候,其结果很可能会和预期的而不符”; - 自动装箱和自动拆箱: 既然有了基本类型和包装类型,肯定有些时候要在它们之间进行转换,把基本类型转换成包装类型的过程叫装箱(boxing).反之,把包装类型转换成基本类型的过程叫做拆箱(unboxing)
自动装箱是通过Integer.valueOf()完成的,自动装箱是通过Integer.intValue()完成的,理解原理之后,我们再来看一道面试题.
//1)基本类型和包装类型
int a=100;
integer=100;
System.out.println(ab) ture
//2)两个包装类型
Integer c=100;
Integer d=100;
System.out.println(cb) ture
//3:重新赋值)
c=200;
d=200;
System.out.println(c==d) false
为什么?为什么?为什么?为什么
分析源码,之前我们已经知道了,自动装箱是通过Integer.valueOf()完成的,那我们就看看源码吧(太多,就不写了)
源码中的IntegerCache在作怪?你猜对了
大致票了一下代码就全明白了,-128到127之间的数字会从IntegerCache中取,然后比较,所有第二段代码(100在这个范围之内)的结果为true,而第三段代码(200不在这个范围之内,所有new出来了
两个Integer对象)的结果为false
请记住—>当需要自定进行装箱时,如果数字在-128到127之间时,会直接使用缓存中的对象,而不是重新创建对象 ;
**总结:**如果相比较的数据类型一致,不会涉及拆装箱的问题,如果是包装类型之间的比较,范围在-128到127之间,会在常量池中取值,不需要new,如果超出-128到127范围之外,则需要new。
基本与包装类型全面对比相关推荐
- JS中数据类型、内置对象、包装类型对象、typeof关系
平时在复习JS基础知识时,经常会遇到JS数据类型.基础数据类型.内置对象.包装类型对象,检测数据类型时,用到的typeof值,感觉都差不多,但是又有差异.今天特地整理下,方便理解. JS数据类型 基础 ...
- 包装类型缓存问题分析
文章目录 写在前面 1. 前言 2. Integer缓存问题分析 2.1 源码分析 2.2 反汇编法 3.Long 的缓存问题分析 3.1 源码分析 3.2 反编译 4. 总结 5. 个人感悟 6. ...
- 13.包装类型应用及场景
包装类型应用及场景 1.包装类型 Java中提供了8种基本数据类型以及对应的8中包装类型.Java是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的. 基本数据 ...
- Java基本类型和包装类型总结
1.Java的基本类型及其对应的包装器类 Java有8种基本类型:大致分为3类:字符,布尔,数值类型(在java中数值是不存在无符号的,这一点不像C/C++,他们的取值范围是固定的,不会随着机器硬件的 ...
- JS引用类型(6)——基本包装类型1
[6]基本包装类型 3个特殊的引用类型:Boolean.Number.String. 每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据. ...
- 为什么阿里巴巴强制要求使用包装类型定义属性?
欢迎关注方志朋的博客,回复"666"获面试宝典 在阿里巴巴Java开发手册中,对于POJO中如何选择变量的类型也有着一些规定: 这里强制要求使用包装类型,原因是什么呢? 我们来看一 ...
- java5引入包装类型的意义_Java中的基本类型和包装类
Java中基本数据类型与包装类型有 基本类型 包装器类型 boolean Boolean char Character int Integer byte Byte short Short long L ...
- 实体类中用基本类型好,还是用包装类型
实体类中用基本类型好,还是用包装类型好? 如果您也考虑这个问题欢迎指正我的观点,如果您正在考虑这个问题,欢迎评论一起讨论一下这个问题 刚才又想到了关于module或者实体类的建立的问题,用基本类型(i ...
- 基本数据类型和包装类型
1.包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址:基本类型不是 2.包装类型是引用的传递:基本类型是值的传递 3.声明方式不同:基本数据类型不需要new关键字:包装类型需要new在堆 ...
最新文章
- 一键进入dfu模式软件_dfu模式是什么 dfu模式介绍及进入方法【详解】
- FreeWheel基于Go的实践经验漫谈——GC是大坑(关键业务场景不用),web框架尚未统一,和c++性能相比难说...
- JVM调优系列:(五)JVM常用调试参数和工具
- 文本分类从入门到精通
- c的关于数组初始化 和 memset用法
- 为什么“消费降级”突然火了?数字基尼系数给你一点理论支撑
- 盲盒拓客小程序商家联盟红包分销裂变抽奖小程序源码
- 润乾报表连接mysql_润乾报表与DERBY数据库的创建连接详解
- java开源代码生成器_人人开源之代码生成器(renren-generator)
- JasperReport| JasperReport中使用自定义字体(font)
- 华为服务器装系统怎么选pxe,服务器设置pxe启动
- 如何在Mac上查找重复文件?
- 分治法解乒乓球比赛日程安排问题
- 利用python实现微信自动回复群发等操作(不需要登录网页版微信)
- L298N驱动俩路电机按键控制正反转
- 长安链源码学习v2.2.1--ioc机制(十)
- 付子玉:丁香园医疗领域图谱的构建与应用
- SEO知识(总结土著游民)(1)
- WMS仓储系统值得提高的功能点
- 检查SSD固态硬盘的使用量和寿命
热门文章
- 三次握手和四次挥手(面试必问)
- 弗吉尼亚理工计算机科学排名,弗吉尼亚理工大学Virginia Tech计算机科学Computer Science专业排名第74位(2021年THE世界大学商科排名)...
- CVE-2022-21882 Win32k内核提权漏洞深入分析
- matlab plot点线的一些参数设置
- 如何将本地文件上传到阿里云服务器
- 买过蓝科高新的在哪里
- MATLAB算法实战应用案例精讲-【智能优化算法】 基于帕累托包络的选择算法II(PESA-II)(附MATLAB代码实现)
- PBR-Diffuse-Lighting-for-GGX
- 靠这几个裂变工具和玩法,社区电商开了3300家店,融资10亿元
- 低学历不能入户广州?拿到这个证书即可落户。