引子
我们都知道Java中存在8种基本数据类型,但是大家对基本数据类型的认识可能依然不够全面。
正文
数据类型 | 数据长度 | 代表含义 | 默认值 | 取值 | 包装类 |
---|---|---|---|---|---|
byte | 8位(bit) | 字节型 | 0 | -128~127 | Byte |
short | 16位2字节(byte) | 短整数型 | 0 | -32768~32767 | Short |
int | 32位4字节 | 整数型 | 0 | -2147483648~2147483647 | Integer |
long | 64位8字节 | 长整数型 | 0L | -9223372036854775808~9223372036854775807 | Long |
float | 32位 | 单精度浮点型 | 0.0f | 1.4E-45~3.4028235E38 | FLoat |
double | 64位 | 双精度浮点型 | 0.0d | 4.9E-324~1.7976931348623157E308 | Double |
boolean | 1位 | 布尔型 | 0(false) | 0(false)~1(true) | Boolean |
char | 16位 | 字符型 | \u0000 | \u0000~\uFFFF | Character |
上面的一览表中对基本数据类型做了一次基本介绍,除此以外还有一些小细节
包装类
包装类和基本数据类型有什么区别呢?
1.包装类符合面向对象的设计原则,作为对象就会存在很多实用的方法
例:equals()、getClass()、toString()、hashCode()
2.包装类都实现了序列化接口
3.泛型
只有对象才能作为泛型,如下
4.包装类为你提供了非常好用的valueOf()方法,满足了你大部分的需求
如何选择包装类和基本数据类型呢
推荐全局变量使用包装类,只有局部变量使用基本数据类型
高频缓存区间
当你抛弃基本数据类型使用基本数据的包装类时,会发现有些时候会出现奇怪的事,如下
Integer a = 127;
Integer b = 123;
Integer c = 127;
Integer d = 128;
Integer e = 128;
System.out.println(a == b);// false
System.out.println(a == c);// true
System.out.println(d == e);// false
这种情况就是因为包装类的高频缓存导致的,即
当Integer的值处于-128~127之间时,多个对象会复用同一堆空间内存引用
所有包装类的高频缓存区间如下
Boolean:当你使用静态 final 定义变量时,就会返回静态值
Byte: -128~127
Short:-128~127
Character:0~127
Long:-128~127
Integer:-128~127
同时,Integer的高频缓存区间可以通过在VM optons 中加入参数进行修改
-XX:AutoBoxCacheMax=999 即可将缓存最大值修改为999
Float和Double不存在高频缓存
到此为止对于数据类型的整体了解就结束了,接下来我会通过几篇单独的博客讲解不同的数据类型的一些细节
最后更新于2022年3月8日
原创不易,如果该文章对你有所帮助,望左上角点击关注~如有任何技术相关问题,可通过评论联系我讨论,我会在力所能及之内进行相应回复以及开单章解决该问题.
该文章如有任何错误请在评论中指出,感激不尽,转载请附出处!
个人博客首页:https://blog.csdn.net/yjrguxing ——您的每个关注和评论都对我意义重大