Java的基本数据类型与包装类

基本数据类型:

  • 不是对象
  • 不需要实例化new
  • 保存在栈上,直接存储的值
  • 有特殊默认值(int的默认值为0)
  • 同一基本类型的不同变量的内存地址一样
  • 运算可以直接进行

包装类:

  • 是对象,有属性和方法
  • 需要实例化new
  • 保存在堆上,存储实例对象的引用,也就是内存地址
  • 所有默认值都是null
  • 实例化得到的同一包装类型相同值得不同变量的内存地址不一样
  • 需要先拆箱为基本类型然后才能进行运算

分类

基本数据类型包装类长度位数最小值最大值
整型byteByte1字节8 -128(-2^7)127(2^7 - 1)
shortShort2字节16 -32768(-2^15)32767(2^15 - 1)
intInteger4字节32-2,147,483,648(-2^31)

2,147,485,647

(2^31 - 1)

longLong8字节64

-9,223,372,036,

854,775,808(-2^63)

9,223,372,036,

854,775,807

(2^63 -1)

浮点型floatFloat4字节32-3.40E+383.40E+38
doubleDouble8字节64-1.79E+308

1.79E+308

字符型charCharacter2字节16\u0000 (0)\uFFFF (65,535)
布尔型booleanBoolean1字节8false

true

拆箱和装箱

拆箱:把包装类转换成基本数据类型的过程
装箱:把基本数据类型转换成包装类的过程

//Java提供了自动拆箱和自动装箱功能
Integer a = 10; //自动装箱

Integer a = Integer.valueOf(10); //等价形式
int b = a; //自动拆箱

int b =a.intValue(); //等价形式

valueOf()方法的缓存机制:编译器提前缓存,直接从缓存里拿,节省内存

  • Integer的-128 ~ 127 之间的整数
  • Boolean的布尔值true和false
  • Character 在 '\u0000' ~ '\u007F' 之间的值(0 ~ 127)

Integer a = 100, b = 100;
System.out.println(a == b);  // Output: true
 
Integer c = 400, d = 400;
System.out.println(c == d);  // Output: false

场景一:将基本数据类型放入集合类:基本数据类型放入集合类中会自动装箱

List<Integer> list = new ArrayList<>();

list.add(1); 

//反编译为list.add(Integer.valueOf(1));

场景二:包装类型与基本类型比较大小:先将包装类型进行拆箱为基本数据类型然后再比较

Integer a = 1;

System.out.println(a==1?"等于":"不等于");

//反编译为System.out.println(a.intValue()==1?"等于":"不等于");

Boolean b = 1;

System.out.println(b?"真":"假");

//反编译为System.out.println(b.booleanValue()?"真":"不假");

场景三:包装类型的运算:会被自动拆箱成基本数据类型进行运算

Integer a = 1 ; //反编译为Integer a = Integer.valueOf(1);

Integer b =2 ; //反编译为Integer a = Integer.valueOf(2);

System.out.println(a+b); 

//反编译为System.out.println(a.intValue()+b.intValue()); 

场景四:三目运算符的应用:null对象的自动拆箱导致NullPointerException异常。

boolean a =true;

boolean b =false;

Boolean c = null;

boolean x = a ? c : b;

//反编译为boolean x = a ? c.booleanValue() : b; =>NullPointerException异常

场景五:函数参数与返回值 

//自动拆箱
public int getNumberOne(Integer n){
    return n;
}

//自动装箱
public Integer getNumberTwo(int n){
    return n;
}

 

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基本数据类型包装类是Java中用来表示数据的两种不同方式。 1. 基本数据类型(Primitive Data Types): - Java基本数据类型有8种:byte、short、int、long、float、double、char和boolean。 - 这些基本数据类型直接存储着数据的值,它们是直接操作内存的,因此效率较高。 - 基本数据类型不具有任何方法,不能调用任何方法。 2. 包装类(Wrapper Classes): - 包装类是用来将基本数据类型包装起来,以便能够以对象的形式使用。 - Java提供了对应于每种基本数据类型包装类:Byte、Short、Integer、Long、Float、Double、Character和Boolean。 - 包装类提供了许多有用的方法,可以进行类型转换、比较、运算等操作。 - 包装类是不可变的(immutable),即一旦创建就无法修改其值。 区别: - 基本数据类型是直接存储数据的值,而包装类是将基本数据类型包装成对象。 - 基本数据类型效率较高,而包装类的效率较低,因为需要进行对象的创建和销毁操作。 - 基本数据类型不能调用任何方法,而包装类提供了许多有用的方法。 - 包装类可以用于泛型、集合类等需要对象作为参数的场景,而基本数据类型则不能直接使用。 - 基本数据类型在内存中占据的空间大小是固定的,而包装类的内存消耗较大,因为需要额外存储一些信息。 总的来说,基本数据类型适合用于简单的数据操作,而包装类适合用于需要更多功能和灵活性的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值