博客
关于我
Java包装类-自动封箱拆箱
阅读量:354 次
发布时间:2019-03-04

本文共 2339 字,大约阅读时间需要 7 分钟。

包装类

1.Java中的包装类

内置数据类型,如:byte、int、long、double 等。
在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面可以看出我们说的包装类实际上就是封装了基本数据的对象的形式,我们看到了,Number类是一个抽象类,是所有数字类型对象的父类,所以每个数值类型的包装类都会实现了Number抽象类的所有抽象方法
在这里插入图片描述



2.举例说明其中的某些方法

首先:构造方法:
在这里插入图片描述

Integer i=new Integer(10);Integer i = new Integer("12");

主要就是以下的两个方法valueOf和xxxVlue方法 就是包装类和基本数据类型的转化方法:

intValue方法将对象类型转为基本数据类型(在其他的包装类中都有相应的xxxValue方法的转换)

Integer i = new Integer(12); int i1 = i.intValue(); System.out.println(i.getClass().getName());   //java.lang.Integer System.out.println(i1);                       //12

基本数据类型转为包装类,用相应包装类的静态方法valueOf方法

Integer i = Integer.valueOf(12);System.out.println(i.getClass().getName());    //java.lang.Integer

还有一个比较重要的静态方法parseXXX将字符串解析为某个基本类型:

public static void main(String[] args) {           double s = Double.parseDouble("123.43");        //int i = Integer.parseInt("123.23");//java.lang.NumberFormatException        System.out.println(s);                                    //123.43        System.out.println(Integer.parseInt("123"));           //123        System.out.println(Double.parseDouble("12"));           //12.0    }

其他的包装类都是类似的,我们进行相应的文档查看就可以

3.自动封箱,自动拆箱

自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。

public static int change(Integer i){       return i.intValue();}    public static void main(String[] args) {           int i=5;        int re = change(i);//自动封箱        System.out.println(re);   //5        Integer i2=new Integer(19);        System.out.println(++i2);              //19  自动拆箱    }

从以上的例子我们可以看出来,change函数需要的是包装类对象,但是我们传入基本类型的数据也可以执行,因为我们在传参后进行了自动封箱,执行了对象的代码,在后面的代码i2对象执行++操作,可以执行的原因是有了自动拆箱的操作,转化为了基本数据类型,才能进行++操作,所以说,封箱拆箱都是自动进行的



重要面试题:

Integer i=127;     Integer i2=127;     System.out.println(i == i2);     Integer j=128;     Integer j2=128;     System.out.println(j==j2);

结果如下:

在这里插入图片描述
这是为什么呢?
同样进行了自动的封箱操作,都转为了对象,但是为什么比较两个内容相同的对象的引用地址会有不同和相同的区别呢?
在这里插入图片描述
在这里插入图片描述
从上面我们可以看出来:JVM在进行类加载的时候,因为-128到127之间的数值是经常被使用的,所以将此范围内的数值提前放到了方法区的整型数常量池当中,所以当我们进行对-128到127间的数值对象进行操作的时候其对象的引用都是在方法区已有对象的直接复用,所以我们无论引用多少次此范围内的对象都是指向的方法区常量池中的同一个对象,但是当我们超出此范围是的Integer对象的时候,就不会在方法区的常量池进行复用,而是在堆中new 对象,尽管数值相同但是==比较的引用地址肯定是不相同的,因为是两个对象。

转载地址:http://vmeq.baihongyu.com/

你可能感兴趣的文章
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>