Java 引用数据类型详细讲解一、核心概念分类除8种基本类型外其余全是引用数据类型存储原理基本类型变量栈中直接存真实数值引用类型变量栈中存对象在堆中的内存地址通过地址找到堆里的实体数据。默认初始值null代表没有指向任何对象。共性都继承自java.lang.Object拥有 Object 通用方法toString()、equals()、hashCode()等。二、四大类引用数据类型1. 类Class自定义类、系统内置类都属于引用类型。// Person是自定义类p为引用变量PersonpnewPerson();new Person()在堆内存创建对象p栈内存保存对象地址指向堆对象。2. 接口Interface接口本身不能new只能由实现类对象接收引用。interfacePlay{}classGameimplementsPlay{}// 多态写法接口引用指向实现类对象PlayplaynewGame();3. 数组Array数组不管存基本类型还是对象数组本身都是引用类型。// int是基本类型但int[]数组是引用类型int[]arrnewint[5];String[]strArrnewString[3];4. 字符串 String特殊引用类型底层字符数组写法简化双引号直接赋值。Strings1abc;Strings2newString(abc);三、内存图解逻辑简化栈内存变量名 → 地址值 堆内存地址对应真实对象/数组数据示例StudentstunewStudent();执行new Student()堆开辟空间创建学生对象把对象内存地址赋值给栈中的stu使用stu.属性/stu.方法()时通过地址找到堆对象操作。四、引用传递特点引用传递传递的是地址多个引用可以指向同一个堆对象一个引用修改对象内容其他引用同步可见。classStudent{intage;}publicclassTest{publicstaticvoidmain(String[]args){Students1newStudent();s1.age18;// s2和s1指向同一个对象Students2s1;s2.age20;System.out.println(s1.age);// 输出20}}五、null 空引用null表示引用变量不指向任何堆对象若用null调用方法/属性抛出NullPointerException空指针异常Stringstrnull;str.length();// 报错空指针六、引用类型 vs 基本类型对比对比项基本数据类型引用数据类型存储内容真实数值对象内存地址内存位置栈内存栈存地址堆存实体数量固定8种无限可自定义类默认值0、0.0、false、‘\u0000’null参数传递值传递拷贝数值引用传递拷贝地址是否继承Object不继承全部继承Object七、常见子类举例类String、Scanner、ArrayList、自定义实体类数组int[]、double[]、String[]、自定义类数组接口List、Runnable、Comparable包装类特殊说明Integer、Double属于引用类型对应基本类型的包装。