java中数组名是引用变量,指向堆中数组对象,赋值时共享内存,可为null,属引用类型且继承object,长度固定、length为字段而非方法。

Java 中的数组名,本质上是一个引用变量,它指向堆内存中实际的数组对象。它不是数据本身,而是“通往数据的路标”。
数组名是引用变量,不是值
声明 int[] arr 时,arr 本身不存数字,只存一个地址——指向 JVM 堆里那块连续分配的、装了若干 int 的内存区域。这和 String s 类似:s 不是字符串内容,而是指向字符串对象的引用。
- 数组名可赋值给其他同类型引用变量(如
int[] b = arr;),此时两个变量指向同一块内存 - 修改
b[0] = 99,arr[0]也会变成 99,因为它们共享底层数据 - 把
arr = null,只是断开引用,原数组对象若无其他引用,将被垃圾回收
数组是引用类型,但无需 class 定义
数组属于引用类型,直接继承自 Object,具备 toString()、clone()、getClass() 等方法。但它和普通类不同:不需要 class Array 这样的源码定义,JVM 在运行时动态生成数组类型(如 int[].class)。
-
int[].class是真实存在的 Class 对象,可通过arr.getClass()获取 - 一维数组类型写成
T[],二维就是T[][],类型信息由元素类型 + 方括号共同构成 - 基本类型数组(如
int[])的元素按值存储;引用类型数组(如String[])的每个元素存的是对象引用
命名规范与常见误区
数组名遵循 Java 变量命名规则(小驼峰、不能数字开头等),但需注意语义清晰——它代表“一组数据”,不是单个值。
- 推荐写法:
String[] userNames,而非String userName[](虽语法合法,但易混淆,且偏离主流风格) - 不要误以为
arr.length是方法调用——它是 public final 字段,不是 length() 方法 - 数组创建后长度固定,
arr.length永远反映初始分配大小,无法扩容
数组名参与的典型操作
理解数组名作为引用的行为,能避免空指针、共享修改等常见问题。
- 判空应写
if (arr != null),而不是if (arr.length > 0)(后者会 NPE) - 复制数组不能只写
int[] copy = arr;,要用Arrays.copyOf(arr, arr.length)或手动循环 - 传参时,方法内对
arr[i]的修改会影响原数组;但arr = new int[]{...}不会影响调用方的引用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











