Java的对象包装器 & 自动装箱
有时,需要将 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的对象包装器 & 自动装箱的更多相关文章
- Java基础(八)对象包装器与自动装箱
1.对象包装器 有时候,需要将int这样的基本类型转换为对象.所有的基本类型都有一个与之对应的类.通常,这些类被称为包装器(wrapper). 这些对象包装类分别是:Integer.Long.Floa ...
- Java语法糖2:自动装箱和自动拆箱
前言 一开始想学学自动拆箱和自动装箱是被这个名字吸引到,听上去好像很高端的样子,其实自动拆箱.自动装箱是很简单的内容. 自动拆箱和自动装箱 Java为每种基本数据类型都提供了对应的包装器类型.举个例子 ...
- C++11多态函数对象包装器
[C++11多态函数对象包装器] 针对函数对象的多态包装器(又称多态函数对象包装器)在语义和语法上和函数指针相似,但不像函数指针那么狭隘.只要能被调用,且其参数能与包装器兼容的都能以多态函数对象包装器 ...
- java基本类型和包装器类
java是一种面向对象语言,java中的类把方法与数据连接在一起,并构成了自包含式的处理单元.但在java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相 ...
- std::function"函数"对象包装器
语义: 类模板std::function是可调用对象的包装器,可以包装除了类成员之外的所有可调用对象.包括,普通函数,函数指针,lambda,仿函数.通过指定的模板参数,它可以用统一的方式保存,并延迟 ...
- Java坑人面试题之自动装箱和拆箱后的引用数据类型和基本数据类型的计算
在Java1.5以后的版本中,引用类型Integer和基本数据类型int之间是可以通过自动装箱和拆箱进行计算的 例如: Integer in = 1; //it means Integer in = ...
- 第12课 std::bind和std::function(3)_std::function可调用对象包装器
1. std::function (1)首先是一个类模板,用于包装可调用对象.可以容纳除了类成员(函数)指针之外的所有可调用对象. (2)可以将普通函数,lambda表达式和函数对象类统一起来.尽管它 ...
- Java 基础 - 自动装箱,valueOf装箱,new -->使用 == 和 equals比较
总结 关于equals 比较 记住:equals方法比较的是真正的值 两个包装类比较,比较的是包装的基本数据类型的值 基本数据类型和包装类型比较时,会先把基本数据类型包装后再比较 (但是因为equa ...
- 【FreeMarker】【程序开发】数据模型,对象包装
[FreeMarker][程序开发]数据模型,对象包装 分类: Java.FreeMarker2014-10-25 18:49 413人阅读 评论(0) 收藏 举报 FreeMarker 目录(? ...
- Java 装箱、拆箱 包装器
先说java的基本数据类型.java基本数据类型:byte.short.int.long.float.double.char.boolean 基本数据类型的自动装箱(autoboxing).拆箱(un ...
随机推荐
- RPA现阶段的问题
RPA(Robotic Process Automation)全称机器人流程自动化,作为"自动化为先"时代的翘楚和先驱,被广泛地用来代替人类自动执行任务,越来越多的领域.企业和人开 ...
- MyBatis详细代码来啦!
家人们,改代码改到现在真的绝了,终于是改出来了,但是对于某些判断性的小问题还没写,细节性满满的增删改查终于实现啦! 目录结构 各个文件的代码: //SqlSessionFactoryUtils.jav ...
- SpringBoot使用邮件发送
使用场景: 定时任务报错 消息推送 日志报错提醒 1.导入依赖 <dependency> <groupId>org.springframework.boot</group ...
- 使用 DeepSpeed 和 Hugging Face 🤗 Transformer 微调 FLAN-T5 XL/XXL
Scaling Instruction-Finetuned Language Models 论文发布了 FLAN-T5 模型,它是 T5 模型的增强版.FLAN-T5 由很多各种各样的任务微调而得,因 ...
- SpringBoot Windows 自启动 - 通过 Windows Service 服务实现
SpringBoot 在Windows运行时,有个黑窗体,容易被不小心选中或关闭,或者服务器重启后,不能自动运行,注册为 Windows Service服务 可实现 SpringBoot 项目在Win ...
- Logoist - 适用于设计师以及初次使用者的快速制作精美 logo 工具
>从简单的标识到设计开发.它只需要一点 ...
- day01-SpringCloud基本介绍
SpringCloud基本介绍 SpringCloud官方文档 1.提出问题 先思考一个问题,没有微服务技术,是不是程序员就不能开发大型项目? 是可以的,对大型项目进行模块划分,对各个模块进行实现.但 ...
- 深入理解 python 虚拟机:令人拍案叫绝的字节码设计
深入理解 python 虚拟机:令人拍案叫绝的字节码设计 在本篇文章当中主要给大家介绍 cpython 虚拟机对于字节码的设计以及在调试过程当中一个比较重要的字段 co_lnotab 的设计原理! p ...
- 【开源项目】合肥~超经典智慧城市CIM/BIM数字孪生可视化项目—开源工程及源码
最新消息,数字孪生智慧宁波开源了其数据工程源码和工程,免费送出供大家学习.使用.分享. 智慧宁波实现了一系列全面的功能,如实现长三角经济圈特效.智慧地铁特效.智慧灯杆特性等.这些项目利用数字孪生技 ...
- Helm 安装 Kubernetes 监控套件
Helm 安装 Grafana Prometheus Altermanager 套件 安装helm # 安装helm工具 curl -fsSL -o get_helm.sh https://raw.g ...