
java常用类--包装类
2. 为什么推荐使用
发布日期:2021-05-15 01:31:24
浏览次数:17
分类:精选文章
本文共 1607 字,大约阅读时间需要 5 分钟。
一、基本概念
基本数据类型在很多编程语言中都很常见,但它们并不具备对象的特性,比如不能调用方法。为了让这些基本数据类型能够像对象一样进行操作,Java为每个基本数据类型提供了一个包装类(Wrapper Class)。这样一来,基本数据类型就可以像对象一样被操作了。
Java中提供了8种基本数据类型的包装类,这些包装类都在java.lang
包中。除Integer
和Character
类外,其他六个包装类的类名与对应的基本数据类型名称一致,区别只在于第一个字母是否大写。具体对应关系如下:
boolean
对应Boolean
char
对应Character
byte
对应Byte
short
对应Short
long
对应Long
int
对应Integer
float
对应Float
double
对应Double
自动装箱与拆箱
自动装箱是指将基本数据类型自动转化为对应的包装类,这种做法符合Java的面向对象特性。相反,自动拆箱则是将包装类转化回对应的基本数据类型。
包装类常量池
每个包装类都有一个常量池,用来存储频繁使用的值。例如:
Byte
的常量池存储 -128 到 127。Short
的常量池同样存储 -128 到 127。Integer
的常量池则存储 -128 到 127。Long
的常量池存储 -128 到 127。
值得注意的是,float
和 double
没有常量池,因为它们的精度较高,缓存值的范围会非常大。
举个例子来说明包装类常量池的作用:
public class IntegerDemo { public static void main(String[] args) { Integer n1 = 1; // 自动装箱,n1指向常量池中的一个Integer对象 Integer n2 = 1; // n1 和 n2 指向同一个对象 System.out.println(n1 == n2); // true Integer n3 = new Integer(1); // n3 指向一个不同的对象 System.out.println(n1 == n3); // false Integer n4 = 128; // 超过常量池范围,n4和n5 指向不同的对象 Integer n5 = 128; System.out.println(n4 == n5); // false }}
Integer常量池的具体工作流程
当你使用 Integer i = 40;
时,JVM会先检查Integer
包装类的常量池中是否有对应的值。如果有,则直接返回该对象的引用;如果没有,则新创建一个Integer
对象并返回其引用。
二、基本类型与包装类之间的转换
基本类型到包装类的转换
- 使用构造器:
Integer n = new Integer(10);
- 使用
valueOf()
方法:Integer n = Integer.valueOf(10);
包装类到基本类型的转换
- 调用对应的
xxxValue()
方法:Integer n = Integer.valueOf(10);int b = n.intValue();
三、面试
1. 基本类型与包装类型的区别
- 基本类型存储在堆内,包装类型存储在栈内。
- 包装类是对象,有方法和字段,调用是通过引用传递。
- 基本类型使用值传递,包装类使用引用传递。
2. 为什么推荐使用 valueOf()
而不是 parseLong()
?
Long
等包装类的valueOf()
方法支持常量池缓存,能够减少资源消耗,而parseLong()
没有这种机制。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月13日 04时35分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2020Java程序设计基础(华东交通大学)章节测试免费满分答案
2019-03-07
解决数据库报ORA-02289:序列不存在错误
2019-03-07
map[]和map.at()取值之间的区别
2019-03-08
成功解决升级virtualenv报错问题
2019-03-08
【SQLI-Lab】靶场搭建
2019-03-08
【Bootstrap5】精细学习记录
2019-03-08
LeetCode197.打家劫舍
2019-03-08
A simple problem HDU-2522 【数学技巧】
2019-03-08
Struts2-从值栈获取list集合数据(三种方式)
2019-03-08
vscode中快速生成vue模板
2019-03-08
参考图像
2019-03-09
设计模式(18)——中介者模式
2019-03-09
用JavaScript实现希尔排序
2019-03-09
推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
2019-03-09
BUU-MISC-认真你就输了
2019-03-09
BUU-MISC-caesar
2019-03-09