论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Java 包装类
Java 包装类
金歌
金牌会员
|
2022-8-21 22:08:28
|
显示全部楼层
|
阅读模式
楼主
主题
924
|
帖子
924
|
积分
2772
目录
概述
创建对象
直接使用字面值
使用构造方法
使用静态方法valueOf
常用方法
自动装箱与自动拆箱
概述
自动装箱
自动拆箱
原理
概述
Java为每一个基本数据类型提供了对应的一个包装类。包装类是一个类,这样Java就可以在包装类中提供常用的方法等供我们使用。
java并不是纯面向对象的语言,java语言是一个面向对象的语言,但是java中的基本数据类型却不是面向对象的,但是我们在实际使用中经常将基本数据类型转换成对象,便于操作,比如,集合的操作中,这时,我们就需要将基本类型数据转化成对象!
基本数据类型和对应包装类的对应关系为:
基本数据类型包装类byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDouble 包装类的功能基本类似本文就以Integer为例子演示。
创建对象
直接使用字面值
public static void main(String[] args) {
Integer i = 10;
}
复制代码
使用构造方法
public static void main(String[] args) {
Integer i = new Integer(10);
Integer i2 = new Integer("11");
}
复制代码
使用静态方法valueOf
public static void main(String[] args) {
Integer i = Integer.valueOf(10);
Integer i2 = Integer.valueOf("11");
}
复制代码
常用方法
方法解释static Integer valueOf(int i)把int转换转换成Integer对象返回static Integer valueOf(String s)把字符串转换转换成Integer对象返回 要求字符串的内容必须为纯数字static int parseInt(String s)把字符串转换转换成int返回 要求字符串的内容必须为纯数字
public static void main(String[] args) {
Integer i = Integer.valueOf(10);
Integer i2 = Integer.valueOf("11");
int num = Integer.parseInt("123");
System.out.println(num);
}
复制代码
结果:
自动装箱与自动拆箱
概述
在JDK1.5中就增加了自动装箱和自动拆箱。主要是让基本数据类和对应的包装类进行
自动
的转换,方便我们的使用。
自动装箱
自动装箱就是基本数据类型可以自动转换为对应的包装类。例如:
Integer i = 10;
int num = 20;
Integer i2 = num;
复制代码
自动拆箱
自动拆箱就是包装类可以自动转换为基本数据类型。例如:
Integer i = new Integer(10);
int num = i;
复制代码
原理
自动装箱其实是通过包装类的静态方法valueOf来实现的转换。
自动拆箱有个很典型的用法就是在进行运算的时候:因为对象时不直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除
例:
Integer num = 10;
//进行计算时隐含的有自动拆箱
System.out.println(num--);
复制代码
下面说点稍微难点的,是稍微
//在-128~127 之外的数
Integer num1 = 297; Integer num2 = 297;
System.out.println("num1==num2: "+(num1==num2));
// 在-128~127 之内的数
Integer num3 = 97; Integer num4 = 97;
System.out.println("num3==num4: "+(num3==num4));
复制代码
结果:
打印的结果是:
num1num2: false
num3num4: true
很奇怪吧:这就归结于java对于Integer与int的自动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)
为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象
而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;明白了吧
以上的现象是由于使用了自动装箱所引起的,如果你没有使用自动装箱,而是跟一般类一样,用new来进行实例化,就会每次new就都一个新的对象;
这个的自动装箱拆箱不仅在基本数据类型中有应用,在String类中也有应用,比如我们经常声明一个String对象时:
String str = "sl";
//代替下面的声明方式
String str = new String("sl");
复制代码
如图片失效等情况请参阅公众号文章:
https://mp.weixin.qq.com/s/5tr-KUiVNJz0LbeEuTAw_A
欢迎关注我的公众号:愚生浅末,一起学习交流。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
金歌
金牌会员
这个人很懒什么都没写!
楼主热帖
iOS 集成WebRTC相关知识点总结 ...
SQL Server 2014完全卸载与SQL Server ...
白鲸开源 DataOps 平台加速数据分析和 ...
查漏补缺——路由显示的是http://local ...
【docker专栏6】详解docker容器状态转 ...
一个工作薄中快速新建多个数据表 ...
iOS直播/游戏怎么利用特殊音效制造娱乐 ...
.NET ORM框架HiSql实战-第一章-集成HiS ...
缓存穿透,缓存雪崩,缓存击穿 ...
【ALM工具软件】上海道宁与Perforce为 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表