【当年笔记】包装类型与基本数据类型
1.Java有8种基本数据类型
数据类型 | 含义 | 默认值 | 取值范围 | 包装类 |
boolean | 布尔类型 | false | false/true |
Boolean
|
byte | 字节 | 0 | -128~127 |
Byte
|
char | 字符型 | 空 | '\u0000' ~ '\uFFFF' |
Character
|
short | 短整型 | 0(short) |
-2^15~2^15-1 |
|
int | 整型 | 0 | -2^31~2^31-1 |
Integer
|
long | 长整型 | 0L | -2^63~2^63-1 |
Long
|
float
|
单精浮点型
|
0.0f |
1.4e-45 到 3.4e+38
|
Float
|
double
|
双浮点型
|
0.0d
|
4.9e-324 到 1.798e+308
|
Double
|
2.包装类型
Java的核心思想之一就是Everything Is an Object,基本数据类型也不例外,因此Java提供了基本数据类型的包装类。可以使数据完成一些对象操作,如获取
hashCode、序列化等
3.高频区间的数据缓存
以 Integer 为例来说,在数值区间为 -128~127
时,会直接复用已有对象,在这区间之外的数字才会在堆上产生。 对应的源码如下
1 2 3 4 5 | public static Integer valueOf( int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } |
各包装类高频区域的取值范围:
* Boolean:使用静态 final 定义,就会返回静态值
* Byte:缓存区 -128~127
* Short:缓存区 -128~127
* Character:缓存区 0~127
* Long:缓存区 -128~127
* Integer:缓存区 -128~127
* Float 和 Double 不会有缓存,其他包装类都有缓存。
因此所有包装类对象之间的值比较使用 `equals()` 方法,因为超出缓存范围 ,会存在数值相同而内存地址不同的情况,用“==”返回false。
* Integer 是唯一可以修改缓存范围的包装类,在 VM optons 加入参数例如: -XX:AutoBoxCacheMax=1000 即修改缓存最大值为 1000
4 自动拆箱和自动装箱
自动装箱:基本类型的数据处于需要对象的环境中时,会自动转为“对象”。
自动拆箱:每当需要一个值时,对象会自动转成基本数据类型,没必要再去显式调用。
自动拆箱:每当需要一个值时,对象会自动转成基本数据类型,没必要再去显式调用。
5.基本数据类型自动转换
精度低的可以向精度高的自动转换、精度高的不能像精度低的转换
byte、short、char不可以相互转换、但是可以运算 运算时会转换成int类型
自动转换规则:
char-->int-->long-->float-->double
byte-->short-->int-->long-->float-->double
当年学习时记的笔记,偶然整理翻到,整理一下发布出来,也算追忆一下青春吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器