Java基本数据类型和包装类型

基本数据类型

基本数据类型有8个,可以分为4个小类,分别是整数类型(byte、short、int、long)、浮点类型、字符类型(char)、布尔类型(boolean)。
在java中基本数据类型:基本数据类型并不具备对象的性质:无属性/无方法调用,但是能简单、有效地进行常规数据处理。

基本数据类型所占内存大小
byte1byte
short2byte
int4byte
long8byte
float4byte
double8byte
char2byte
boolean1byte/4byte

在《Java虚拟机规范中》中指出boolean的变量是被当作int类型来处理的,而boolean数组的操作,则与操作byte数组等价。
这些基本数据类型进行自动类型转换时,会由小精度转换为大精度
但是需要注意,(byte,short)和char之间是无法进行自动类型转换的。当byte,short或char这三者中,任意一种或多种类型参与运算时,都会默认转换为int类型

但是在很多时候不能用基本数据类型,而是对应的包装类,比如集合和equals函数中,参数就是Object对象

包装类型

为了让基本数据类型也具备对象的特征而引申出的类型。为基本数据类型添加了属性和方法,丰富了基本数据类型的操作。

基本数据类型包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

针对基本数据类型和包装类型的转换有两个操作:装箱(基础类型转包装类型)拆箱(包装类型转基础类型)

在一些情况下,编译器会自动完成装箱或者拆箱操作:

  • ArrayList、 HashMap等集合类添加基础类型数据时(装箱)
  • 进行比较运算(拆箱)
  • 使用equals进行比较(装箱)
  • 进行算数运算(拆箱)
  • 赋值操作(装箱或拆箱)

基本数据类型和包装类的区别

  1. 定义不同。包装类属于对象,基本数据类型不是
  2. 声明和使用方式不同。包装类使用new初始化,有些集合类的定义不能使用基本数据类型,例如 ArrayList
  3. 初始值不同。包装类默认值为null,基本数据类型则不同的类型都有其特定的初始值,如下图:
基本数据类型默认初始值
byte0
short0
int0
long0L
float0.0F
double0.0
char‘\u0000’
booleanfalse

4.存储方式和位置不同,从而性能不同。基本数据类型存储在栈(stack)中,包装类则分成引用和实例,引用在栈(stack)中,具体实例在堆(heap)中。

equals和 == 的区别

equals()函数比较的是Object对象里的数值,涉及到拆箱和装箱操作
对于基本数据类型,== 比较的是值,而对于包装类型,== 比较的则是2个对象的内存地址。

Java对部分经常使用的数据采用缓存技术,在类第一次被加载时换创建缓存和数据。当使用等值对象时直接从缓存中获取,从而提高了程序执行性能。(通常只对常用数据进行缓存,且只有valueOf方法构造对象时会用到缓存,new方法等不会使用缓存)

  1. Integer类型有缓存-128-127的对象。缓存上限可以通过配置jvm更改
  2. Byte,Short,Long类型有缓存(-128-127)
  3. Character缓存0-127
  4. Boolean缓存TRUE、FALSE

下面举一个代码例子:

        Integer a1 = 20;
        Integer b1 = 20;
        System.out.println(a1 == b1);
        Integer a2 = 200;
        Integer b2 = 20;
        System.out.println(a2 == b2);

在上述代码中,将基本数据类型的值赋值给包装类型,例如Integer a1 = 20 会调用到Integer.valueof(20),从上文可以知道,当数值在-128-127之间时,是直接从缓存中取出,所以a1和b1指向同一个地址;a2和b2由于不在缓存范围之内,所以会new一个Integer包装类,所以指向不同地址。所以,最终结果为:

true
false
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值