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

基本数据类型

  • 定义
    Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。

  • 基本数据类型的分类
    Java基本数据类型图
    包装类
    包装类顾名思义就是将基本数据类型的所没有属性和方法包装到类中,实现对象化的交互。
    数据类型对比
    区别
    基本数据类型和包装类的区别主要有以下4点:

  • 包装类可以为null,而基本类型不可以
    这使得在POJO中只能应用包装类型,而基本类型则不行。
    POJO:简单无规则的Java对象,只有属性字段以及setter和getter方法。
    示例:

class Writer{
	private Integer age;
	
	public Integer getAge(){
		return age;
	}

	public void setAge(Integer age){
		this.age=age;
	}
}

只能使用包装类型的原因是:数据库的查询结果可能是null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型),就会抛出NullPointerException的异常。

- 包装类型可以用于泛型,而基本类型不可以

ArrayList<int> list = new ArrayList<>();
 // 提示 Syntax error, insert "Dimensions" to complete ReferenceType
ArrayList<Integer> list = new ArrayList<>();
  • 基本类型比泛型更高效
    基本数据类型的具体数值直接存储在栈中,而包装类型在栈中存储的只是堆中的引用。如下图所示:
    不同数据类型内存结构
    从图中可以看出,相比于基本数据类型,包装类型要占用更多的内存空间。且两个包装类型的值相同,并不代表它们相等。
Integer a = new Integer(10);
Integer b = new Integer(10);

System.out.println(a==b);  //false
System.out.println(a.equals(b));  //true

- 自动装箱和自动拆箱

把基本类型转换成包装类型的过程叫做装箱。
反之,把包装类型转换成基本类型的过程叫做拆箱。

在Java SE5之前,开发人员需要手动进行拆装过程:

Integer a = new Integer(10);  //手动装箱
int b = a.intValue();  //手动拆箱

Java SE5 开始提供了自动装箱与自动拆箱的功能:

Integer a = 10;  //自动装箱
int b = a;  //自动拆箱

等价于
=>
Integer a = Integer.valueOf(10);
int b = a.intValue();

即,自动装箱通过Integer.valueOf()来完成,而自动拆箱通过Integer.intValue()来完成。

需要注意的是:当需要进行自动装箱时,如果数字在 -128 至 127 之间时,会直接使用缓存中的对象,而不是重新创建一个对象。

示例:

//1.基本类型与包装类型
int a = 100;
Integer b = 100;
System.out.println(a==b);  //true

//2.两个包装类型
Integer c = 100;
Integer d = 100;
System.out.println(c==d);  //true

//3.
Integer c = 128;
Integer d = 128;
System.out.println(c==d);  //false
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值