深入浅出Java基本数据类型

本文详细介绍了Java中的八种基本数据类型(如byte、short、int等),包装类的特点,包括它们的对象特性、序列化接口和valueOf方法的应用。此外,还揭示了包装类的高频缓存现象,以及如何在选择包装类与基本类型时做出明智决定。
摘要由CSDN通过智能技术生成

引子

我们都知道Java中存在8种基本数据类型,但是大家对基本数据类型的认识可能依然不够全面。

正文

数据类型数据长度代表含义默认值取值包装类
byte8位(bit)字节型0-128~127Byte
short16位2字节(byte)短整数型0-32768~32767Short
int32位4字节整数型0-2147483648~2147483647Integer
long64位8字节长整数型0L-9223372036854775808~9223372036854775807Long
float32位单精度浮点型0.0f1.4E-45~3.4028235E38FLoat
double64位双精度浮点型0.0d4.9E-324~1.7976931348623157E308Double
boolean1位布尔型0(false)0(false)~1(true)Boolean
char16位字符型\u0000\u0000~\uFFFFCharacter

上面的一览表中对基本数据类型做了一次基本介绍,除此以外还有一些小细节

包装类

包装类和基本数据类型有什么区别呢?
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不存在高频缓存

到此为止对于数据类型的整体了解就结束了,接下来我会通过几篇单独的博客讲解不同的数据类型的一些细节

  1. Float与Double:完全解析为什么0.1+0.2=0.30000000000000004

最后更新于2022年3月8日
原创不易,如果该文章对你有所帮助,望左上角点击关注~如有任何技术相关问题,可通过评论联系我讨论,我会在力所能及之内进行相应回复以及开单章解决该问题.

该文章如有任何错误请在评论中指出,感激不尽,转载请附出处!
个人博客首页:https://blog.csdn.net/yjrguxing ——您的每个关注和评论都对我意义重大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值