基本数据类型和引用类型简介:

  1. JAVA中基本数据类型只有八种:byte,short,char,int,long,float,double,boolean
  2. 除了这八种之外的类型,都称为引用类型。
  3. 比较常见的引用类型有类、数组、接口等。



两者的主要区别在于创建时存储的不同:

  1. 基本数据类型:基本数据类型在被创建的时候,只会在栈中为这个基本数据类型的变量开辟一个内存空间,而且开辟的这个内存空间栈中直接存储这个基本数据类型的值。所以我们在用“==”比较符来比较基本数据类型的时候,比较的就是该基本数据类型的值。
  2. 引用类型:引用类型在被创建的时候,使用了栈和堆来存储,会把创建出来的对象数据存储在堆空间中,然后会在栈空间中为这个对象的引用变量分配一个内存空间,这个分配的内存空间用来存储这个对象在堆空间中的地址。所以引用变量指向了对象在堆空间中的地址,能通过这个引用变量来操作对象。因此我们在用“==”比较符来比较引用类型数据的时候,比较的就是有引用类型在栈空间中存储的对象的引用地址。



例子:

基本数据类型:
定义两个int类型的基本类型数据,分别命名为a和b,并赋值3和5。

public static void main(String[] args){
        int a=3;
        int b=5;
}

JAVA在内存中空间分配存储:

java种基本类型和引用 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在内存中空间分配存储:

java种基本类型和引用 java基本类型与引用类型_栈_02


由上图可知定义的user只是一个引用类型的变量,真正的对象创建后是保存在堆空间中的,由于对象是没有名字的,所以引用类型变量在栈空间中存储了对象在堆空间中的地址,然后通过这个变量的名字来调用操作这个创建出来的对象,如果堆空间中的对象没有引用变量指向,那么就会被视为垃圾,过一段时间后会被GC掉。

对堆空间的内容用一句话概括就是基本上一切new出来的数据都是被保存在堆空间中的,除了极少数个别例外的