区别引用类型和基本类型

Java中提供了两种数据类型,分别是基本数据类型(primary data type)和引用数据类型(reference type)。它们之间最明显的区别就是:基本数据类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。

基本数据类型也称值类型、原始类型或者内置类型。Java中的基本数据类型一共有8种,byte、short、int、long、float、double、char、Boolean。同时为了面向对象操作的一致性,这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。基本数据类型的默认值都是0或者0的变形。
引用类型和基本数据类型的行为完全不同,并且它们具有不同的语义。引用类型指向一个对象,不是原始值,指向对象的变量是引用变量。在Java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。最常用的引用类型有数组、类、接口。引用类型的默认值为null,表示是一个空引用。
基本数据类型使用举例:

//定义一个int基本数据类型变量num1,将数字10赋值给num1
        int num1 = 10;
        //给num1重新赋值为20
        num1 = 20;
        //将num1的值打印出来
        System.out.println(num1);//输出 10

        double num2 = 5.8;
        num2 = 7.8;
        System.out.println(num2);//输出7.8

        boolean num3 = true;
        num3 = false;
        System.out.println(num3);//输出 false

声明一个基本数据类型变量,编译器会在栈上分配一个空间,这个空间对应着该基本数据类型变量,空间里存储的就是该变量的值。

引用类型和基本数据类型的行为完全不同,并且它们具有不同的语义。引用类型指向一个对象,不是原始值,指向对象的变量是引用变量。在Java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。最常用的引用类型有数组、类、接口。引用类型的默认值为null,表示是一个空引用。

引用类型的使用示例

//定义int类型的数组引用类型arr1
        int[] arr1 = new int[] {1,2,3,4,5};
        //让arr1改变指向
        arr1 = new int[] {6,7,8,9,0};
        //打印数组arr1中的数据
        for (int num:arr1) {
            System.out.println(num); //输出6 7 8 9 0
        }
        //定义String类型的数组引用类型str1
        String[] str1 = new String[] {"hello", "world", "!"};
        //改变str1的第二个元素
        str1[1] = "Java";
        for (String str: str1) {
            System.out.println(str);//输出hello Java !
        }
//定义一个Java类的引用类型,类名为Animals
public class Animals {
    String name;//成员属性
    int age;
}

public class Test {
    public static void main(String[] args) {
        //根据Animals类创建animals对象
        Animals animals = new Animals();
         = "panda";
        animals.age = 150;
        System.out.println(); //输出panda
        System.out.println(animals.age); //输出150
    }
}

引用类型和原始类型具有不同的特征和用法,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。

引用是一种数据类型,保存了指向的对象在内存(heap堆空间)中的地址。引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址。