在刚刚学习java的时候,老师不止一次的说过java是一种面向对象的语言,万物皆对象。对于java中的基础数据类型,由于为了符合java中面向对象的特点,同样也有其封装类。这篇文章对其有一个认识。

一、基本认识

其实在jdk1.5之前,在基础数据类型与其封装器之间的转化必须手动进行,但是从jdk1.5之后,由于提供了自动装箱的机制,因此我们不再手动进行了。

装箱:基础类型转封装类型。Integer a = 3
底层实现:Integer a = Integer.valueOf(3);
拆箱:封装类型转基础类型。int b = a;
底层实现:int b = a.intValue();

既然封装类能够封装基础类型,那么能封装的范围是多少呢?

基本类型封装器字节数最大值最小值byteByte1byte2^7 - 1-2^7shortShort2byte2^15 - 1-2^15charCharacter2byte2^16 - 10intInteger4byte2^31 - 1-2^31longLong8byte2^63 - 1-2^63floatFloat4byte3.4e+381.4e-45doubleDouble8byte1.8e+3084.9e-324booleanBoolean1byte/4byte/不明确--

我们对其进行了一个总结。不过我们应该注意到boolean类型没有给出精确的定义,可能是一个字节也有可能是四个字节,这是为什么呢?java虚拟机规范中规定的是4个字节,但是不同的厂家虚拟机可能不同,所以可能不会按照规范来。

以上这张图想必我们都不陌生,每一种基础类型都有一个唯一的封装类。而且也给出了字节数、最大值最小值等。下面我们就看一下其基本使用:

public 

二、基础类型与封装类的区别

1、传递方式不同

基本类型是按值传递,而封装类型是按引用传递的。int是基本类型,直接存放数值;Integer类会产生一个对象引用指向这个对象。

2、存储位置不同

基本类型存储在栈中,封装类的引用存储在栈中,而值是存在堆中。这样看上去好像基础封装类多此一举,而且基本类型的速度也确实会比封装类更快。为什么快呢?这是因为封装类涉及到了对象内存的分配和垃圾回收。但是基本类型直接拿起来就计算了。

三、源码分析

在讲解源码之前我们先给出一个神奇的例子,请看下面的代码:

public 

第一种情况感觉和第二种情况一模一样呀,为什么第二种是false呢?想要知道原因,我们就必须要深入到源码中找寻答案。

public 

也就是说,在合理表示范围之内就直接拿出来一个旧的数据,如果不在表示范围之内那就创建一个新的。但是对于源码的了解不能仅限于此。我们还是按部就班的分析,下面我们以Integer封装类为例。

1、参数

//最小值::-2147483648

2、方法

//方法1:将字符串参数解析为有符号的整数

3、缓存

上面支持给出了一些基本的使用方法,不过最核心的还是缓存范围的实现。下面我们看一下:

private 

上面这些代码能看懂最好,看不懂我来描述一下大概意思:这是一个静态内部类,类中定义一个静态cache数组,这个静态数组预先放了自己指定范围内的数据,拆箱的时候首先判断范围然后从缓存数组中去抓取数据。就是这么一个简单的过程。

四、使用场景

上面分析了这么多,最主要的还是如何使用,在什么地方使用。下面我们就总结几个场景:

1、类型之间的转换:

String 

2、泛型中使用

List<>为原始类型,不指定元素类型时,会出现不安全的警告:

List is a raw type. References to generic type List<E> should be parameterized

大概意思就是:List的<>中应该指定清楚是那种类型,如Integer、String等。

3、强制类型转换

4、集合中使用

public 

这种情况下会出现空指针异常。

OK。今天的文章先到这里,如有问题还请批评指正。

java integer最大值_五分钟学会java中的基础类型封装类相关推荐

  1. java常用算法_五分钟记住Java常用的八种排序算法与代码实现

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...

  2. 老滚5初始化python失败_五分钟学会怎么用python做一个简单的贪吃蛇

    Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发.我们今天将利用它来制作一款大家基本都玩过的小游戏--贪吃蛇. 一.需要导入的包 import pygame ...

  3. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机...

    原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...

  4. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机||CSDN博文精选...

    作者:黄小斜 原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java面试中总是爱考一类问题, ...

  5. Java并发插件_五分钟,轻松掌握Java并发编程!

    Java作为最流行的编程语言之一,随着 Java 8的到来,越来越多的人开始学习,并深入研究!下面将介绍 Java并发编程,让开发者在最短的时间里掌握并发编程. 1. 并发 1.1. 什么是并发? 并 ...

  6. python列表删除重复项_五分钟学会三种Excel重复项删除方法,工作效率大杀器!...

    点击蓝字 关注我们 在统计数据过程中, 同一份数据可能由于渠道的不同而进行了多次统计, 在输入数据时, 可能因为操作失误重复输入数据.种种原因造成数据表中的数据存在重复现象, 删除重复数据是数据清洗的 ...

  7. 五分钟学会企业的OpenStack(T版)——简介及安装方式

    五分钟学会企业的OpenStack(T版)--简介及安装方式 前言 一.OpenStack简介 二.OpenStack安装方式(T版)系列 前言 花了几天写完了OpenStack(T版)的系列文章,希 ...

  8. Java虚拟机笔记(五):JVM中对象的分代

    为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...

  9. 五分钟学会用Simulink模型生成HDL代码

    五分钟学会用Simulink模型生成HDL代码 1 核心步骤 2 视频展示 3 生成HDL代码的注意事项 3.1 HDL支持的库和模块 3.2 设置simulink模型为可生成 hdl 的模式 3.3 ...

最新文章

  1. Android studio第一次使用配置(三)gradle项目构建
  2. 解决Kali Linux 2020.1乱码问题
  3. 获取application.yml中的属性的方法
  4. java开发一个完整的秒杀与竞价网上商城
  5. 巧用记忆化搜索代替暴力递归(洛谷P1464题题解,Java语言描述)
  6. HTML5 Canvas中绘制文本
  7. [Python+MATLAB] 在Python中使用MATLAB (持续更新中)
  8. think php 500错误,thinkPHP5配置nginx环境无法打开 ,每次都是报500错误
  9. 《高等代数学》(姚慕生),复习题一,第1题
  10. 卡巴斯基2017免费版发布下载:文件/网页杀毒、自动更新/保护
  11. 跟我学Python图像处理丨带你掌握傅里叶变换原理及实现
  12. uniapp showToast
  13. C语言阶段小项目(火车购票系统)
  14. 耳机接口规则_线控缘何不兼容 3.5mm耳机接口的奥秘
  15. 小程序源码:登录已修复零象垃圾废品回收微信小程序源码下载,V2.8.2完整全开源前端+后端
  16. Python解释器整数运算向下圆整问题
  17. 数学/线性代数 {矩阵初等变换,[阶梯形/最简形]矩阵,初等矩阵}
  18. Hollong 低功耗蓝牙4.0/4.1/4.2 BLE Sniffer协议分析仪
  19. (附源码)小程序 交通违法举报系统 毕业设计 242045
  20. CISSP考试指南笔记:3.8 开放系统与封闭系统

热门文章

  1. lower_case_table_names=1 启动报错 mysql8.0
  2. Unable to delete directory: D:\Downloads\githubdownfive\tianxmyapp\library\
  3. QC与WIN7、IE8 兼容问题解决方案
  4. linuxsed替换字符串后保存_Numpy运用-文件读写、存储及字符串处理
  5. ie 调用java的时候报错,调用javabean的非常郁闷的异常。
  6. java 实现超时_如何实现带有超时的Runnable? - java
  7. python 生成器推导式
  8. 【雷军】给程序员的五点建议--如何成为编程高手并以此创业
  9. 实验16 编写包含多个功能子程序的中断例程
  10. 生成下拉框的几种方法总结——数据来源:枚举