java基本数据类型和引用数据类型区别
基本数据类型
java有八种基本数据类型,分别对应八种不同的类,如图所示:
java基本数据类型和类的实例对象有什么区别呢?
Java基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。
自动装箱和自动拆箱
自动装箱就是自动将基本数据类型转换为包装器类型;
自动拆箱就是自动将包装器类型转换为基本数据类型。
从Java5.0开始,JVM可以完成基本类型和它们对应包装类之间的自动转换。因此我们在赋值、参数传递以及数学运算的时候像使用基本类型一样使用它们的包装类。但是不能通过基本类型调用它们的包装类才具有的方法。
另外,所有基本类型的包装类都使用了final修饰,因此我们无法继承它们扩展新的类,也无法重写它们的任何方法。
引用数据类型
我们首先来了解一下什么是引用数据类型:
该数据类型在创建的时候,会先在堆内存中分配一块空间,存储对象的具体信息,然后在栈中存储该对象的地址信息;
这句话的意思是,当我们创建一个引用数据类型时,该数据在堆中存储数据本身,在栈中存储指向该数据的内容,在栈中指向的数据类似于C语言中的指针。
如果还不好理解的话,我们来看一下和基本数据类型的对比:
表头 | 基本数据类型 | 引用数据类型 |
---|---|---|
变量名指向的对象 | 具体的数值 | 存储对象的内存地址 |
内存分配位置 | 栈 | 堆 |
声明后内存是否分配 | 是 | 否(只是存储内存地址) |
赋值 | 内容的拷贝 | 传递引用,多个引用指向同一个数据 |
比较是否相等 | == | equals方法 |
引用数据类型主要包括类、接口类型、数组类型、字符串型(String)等等。 |