有时,需要将 int 这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。例如,Integer 类对应基本类型 int。通常,这些类被称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void 和 Boolean(前 6 个类派生于公共的父类 Number)。对象包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时,对象包装器类还是 final,因此不能定义它们的子类。

有一个很有用的特性,从而更加便于添加 int 类型的元素到 ArrayList 中。下面这个调用 list.add(3); 将自动地变换成 list.add(Integer.valueOf(3));。这种变换被称为自动装箱(autoboxing)。

相反地,当将一个 Integer 对象赋给一个 int 类型的变量时,将会自动地拆箱。也就是说,编译器将下列语句:int n = list.get(i); 翻译成 int n = list.get(i).intValue();。

最后强调一下,装箱和拆箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时,插入必要的方法调用。虚拟机只是执行这些字节码。

参考资料

《Java核心技术卷一:基础知识》(第10版)第 5 章:继承 5.4 对象包装器与自动装箱

Java的对象包装器 & 自动装箱的更多相关文章

  1. Java基础(八)对象包装器与自动装箱

    1.对象包装器 有时候,需要将int这样的基本类型转换为对象.所有的基本类型都有一个与之对应的类.通常,这些类被称为包装器(wrapper). 这些对象包装类分别是:Integer.Long.Floa ...

  2. Java语法糖2:自动装箱和自动拆箱

    前言 一开始想学学自动拆箱和自动装箱是被这个名字吸引到,听上去好像很高端的样子,其实自动拆箱.自动装箱是很简单的内容. 自动拆箱和自动装箱 Java为每种基本数据类型都提供了对应的包装器类型.举个例子 ...

  3. C++11多态函数对象包装器

    [C++11多态函数对象包装器] 针对函数对象的多态包装器(又称多态函数对象包装器)在语义和语法上和函数指针相似,但不像函数指针那么狭隘.只要能被调用,且其参数能与包装器兼容的都能以多态函数对象包装器 ...

  4. java基本类型和包装器类

    java是一种面向对象语言,java中的类把方法与数据连接在一起,并构成了自包含式的处理单元.但在java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相 ...

  5. std::function"函数"对象包装器

    语义: 类模板std::function是可调用对象的包装器,可以包装除了类成员之外的所有可调用对象.包括,普通函数,函数指针,lambda,仿函数.通过指定的模板参数,它可以用统一的方式保存,并延迟 ...

  6. Java坑人面试题之自动装箱和拆箱后的引用数据类型和基本数据类型的计算

    在Java1.5以后的版本中,引用类型Integer和基本数据类型int之间是可以通过自动装箱和拆箱进行计算的 例如: Integer in = 1; //it means  Integer in = ...

  7. 第12课 std::bind和std::function(3)_std::function可调用对象包装器

    1. std::function (1)首先是一个类模板,用于包装可调用对象.可以容纳除了类成员(函数)指针之外的所有可调用对象. (2)可以将普通函数,lambda表达式和函数对象类统一起来.尽管它 ...

  8. Java 基础 - 自动装箱,valueOf装箱,new -->使用 == 和 equals比较

    总结 关于equals 比较  记住:equals方法比较的是真正的值 两个包装类比较,比较的是包装的基本数据类型的值 基本数据类型和包装类型比较时,会先把基本数据类型包装后再比较 (但是因为equa ...

  9. 【FreeMarker】【程序开发】数据模型,对象包装

    [FreeMarker][程序开发]数据模型,对象包装 分类: Java.FreeMarker2014-10-25 18:49 413人阅读 评论(0) 收藏 举报 FreeMarker   目录(? ...

  10. Java 装箱、拆箱 包装器

    先说java的基本数据类型.java基本数据类型:byte.short.int.long.float.double.char.boolean 基本数据类型的自动装箱(autoboxing).拆箱(un ...

随机推荐

  1. xlsx合并单元格简单介绍

    在使用xlsx导出excel表格的时候,有时候我们需要将某些表格进行合并,该如何做呢,代码如下: import XLSX from 'xlsx'; // ... // xlsxData 是 Excel ...

  2. 关于uni-app开发的微信小程序顶部导航条机型适配

    背景: 小程序顶部导航栏那里的样式和功能都是小程序自带的,当我们在pages.json里的pages里新加一条页面配置时,会自动生成一个带顶部导航栏的空白页面,当然也可以再配置里"navig ...

  3. 随笔:for in 和 for of的区别

    百度前端面试题:for in 和 for of的区别详解以及为for in的输出顺序 - 知乎 以该页面为例,我稍微总结一点东西: 在这⾥我们把对象中的数字属性称为 「排序属性」,在V8中被称为 el ...

  4. Vue解决后台传过来的时间展示时带T

    用空格替换: {{scope.row.ctime.toLocaleString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')}} 参考作者:https: ...

  5. webservice学习随笔(一):简单的webservice实例

    一.webService概念简单介绍: 简单来说,webservice就是远程调用技术,也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的 ...

  6. Neo4j学习(2)--简单入门

    1.Neo4j属性图数据模型 节点:包含多个属性和标签.一个节点就是一条数据 属性:键值对形式 关系:单向与双向,连接节点,也可包含多个属性和标签 标签:表示节点和关系的类型,可以有多个,同时可以通过 ...

  7. (1)入门MasaFramework教程

    (1)入门MasaFramework教程 首先了解一下MasaFramework是什么 MasaFramework是一个基于.Net6.0的后端框架, 可以被用于开发Web应用程序.WPF项目.控制台 ...

  8. 关于如何编写好金融科技客户端SDK的思考

    引言 回想起来,我在目前的团队(金融科技领域)待了有很长一段时间了,一直在做SDK研发,平时工作中经历过大刀阔斧一蹴而就的喜悦,也经历过被一个问题按在地上摩擦,无奈"废寝忘食"的不 ...

  9. Centos7 设置定时任务

    Centos7 设置定时任务 在centos上最常用的定时任务应该就是crontab了,在经过各种度娘之后有三种方式实现定时任务的方法,但是所用到的场景有所不同 at 适合仅执行一次就结束的调度命令, ...

  10. SpringCloud Fegin 负载均衡

    Spring Cloud Ribbon 和 Spring Cloud Hystrix 在微服务中实现了客户端负载均衡的服务调用以及通过断路器来保护微服务应用.这两者作为基础工具类框架广泛地应用在各个微 ...