
Java 基本数据按类型可以分为四大类:布尔型、整数型、浮点型、字符型,这四大类包含 8
种基本数据类型。
•
布尔型:
boolean
•
整数型:
byte
、
short
、
int
、
long
•
浮点型:
float
、
double
•
字符型:
char
8
种基本类型取值如下:
除
char
的包装类
Character
和
int
的包装类
Integer
之外,其他基本数据类型的包装类只需要首字母大写即可。包装类的作用和特点,本文下半部分详细讲解。
我们可以在代码中,查看某种类型的取值范围,代码如下:
包装类型
我们知道
8
种基本数据类型都有其对应的包装类,因为
Java
的设计思想是万物既对象,有很多时候我们需要以对象的形式操作某项功能,比如说获取哈希值(hashCode
)或获取类(
getClass
)等。
那包装类特性有哪些?
1.
功能丰富
包装类本质上是一个对象,对象就包含有属性和方法,比如
hashCode
、
getClass
、
max
、
min
等。
2.
可定义泛型类型参数
包装类可以定义泛型,而基本类型不行。
比如使用 Integer
定义泛型,代码:
List
<Integer>
list
=
new
ArrayList<>();
如果使用
int
定义就会报错,代码:
List list
=
new
ArrayList<>();
//
编译器代码报错
3.
序列化
因为包装类都实现了
Serializable
接口,所以包装类天然支持序列化和反序列化。
比如
Integer
的类图如下:
4.
类型转换
包装类提供了类型转换的方法,可以很方便的实现类型之间的转换,比如
Integer 类型转换代码:
String age =
"18"
;
int
ageInt = Integer.parseInt(age) +
2
;
//
输出结果:
20
System.
out
.println(ageInt);
5.
高频区间的数据缓存
此特性为包装类很重要的用途之一,用于高频区间的数据缓存,以
Integer
为例来说,在数值区间为 -128~127
时,会直接复用已有对象,在这区间之外的数字才会在堆上产生。
我们使用
==
对
Integer
进行验证,代码如下:
讯享网
从上面的代码很明显可以看出,
Integer
为
127 java的基础数据型
时复用了已有对象,当值为
128 时,重新在堆上生成了新对象。
为什么会产生高频区域数据缓存?我们查看源码就能发现
“
线索
”
,源码版本 JDK8,源码如下:
由此可见,高频区域的数值会直接使用已有对象,非高频区域的数值会重新
new
一个新的对象。
各包装类高频区域的取值范围:
•
Boolean
:使用静态
final
定义,就会返回静态值
•
Byte
:缓存区
-128~127
•
Short
:缓存区
-128~127
•
Character
:缓存区
0~127
•
Long
:缓存区
-128~127
•
Integer
:缓存区
-128~127
包装类的注意事项
•
int
的默认值是
0
,而
Integer
的默认值是
null
。
•
推荐所有包装类对象之间的值比较使用
equals()
方法,因为包装类的非高频区数据会在堆上产生,而高频区又会复用已有对象,这样会导致同样的代码,因为取值的不同,而产生两种截然不同的结果。
代码示例:
讯享网
•
Float
和
Double
不会有缓存,其他包装类都有缓存。
•
Integer
是唯一一个可以修改缓存范围的包装类,在
VM optons
加入参
数:
-XX:AutoBoxCacheMax=666
即修改缓存最大值为
666
。
示例代码如下:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/8760.html