基本数据类型和引用类型简介:
- JAVA中基本数据类型只有八种:byte,short,char,int,long,float,double,boolean。
- 除了这八种之外的类型,都称为引用类型。
- 比较常见的引用类型有类、数组、接口等。
两者的主要区别在于创建时存储的不同:
- 基本数据类型:基本数据类型在被创建的时候,只会在栈中为这个基本数据类型的变量开辟一个内存空间,而且开辟的这个内存空间栈中直接存储这个基本数据类型的值。所以我们在用“==”比较符来比较基本数据类型的时候,比较的就是该基本数据类型的值。
- 引用类型:引用类型在被创建的时候,使用了栈和堆来存储,会把创建出来的对象数据存储在堆空间中,然后会在栈空间中为这个对象的引用变量分配一个内存空间,这个分配的内存空间用来存储这个对象在堆空间中的地址。所以引用变量指向了对象在堆空间中的地址,能通过这个引用变量来操作对象。因此我们在用“==”比较符来比较引用类型数据的时候,比较的就是有引用类型在栈空间中存储的对象的引用地址。
例子:
基本数据类型:
定义两个int类型的基本类型数据,分别命名为a和b,并赋值3和5。
public static void main(String[] args){
int a=3;
int b=5;
}
JAVA在内存中空间分配存储:
由上图可知,基本数据类型只在栈空间中为变量分配了内存,并且存储了数据的值。
引用类型:
创建一个User类,User类中有name和age两个属性
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
放到main主程序中:
public static void main(String[] args){
int a=3;
int b=5;
//定义一个User类型的引用变量,该引用变量名为user
User user=null;
//创建User类的对象,这个对象存储在堆空间中,该对象的地址赋给user引用变量
user=new User();
user.setAge(18);
user.setName("张三");
}
JAVA在内存中空间分配存储:
由上图可知定义的user只是一个引用类型的变量,真正的对象创建后是保存在堆空间中的,由于对象是没有名字的,所以引用类型变量在栈空间中存储了对象在堆空间中的地址,然后通过这个变量的名字来调用操作这个创建出来的对象,如果堆空间中的对象没有引用变量指向,那么就会被视为垃圾,过一段时间后会被GC掉。
对堆空间的内容用一句话概括就是基本上一切new出来的数据都是被保存在堆空间中的,除了极少数个别例外的