为什么 Java 数组不支持先声明后初始化?

Java 数组的声明形式有以下两

//第一种,
int[] arr;
//第二种
int arr[];

复制代码

Java数组的初始化有以下几种

//静态初始化
int[] arr = new int[]{1,2,3};
//简化形式
int[] arr = {1,2,3}
//动态初始化
int[] arr = new int[3];

复制代码

静态初始化的简化形式是编译器对Java代码进行的优化,在编译时,如果使用了静态初始化的简化版,编译器会在编译时自动加上缺少的部分。

示例:
image.png
上图是源码,下图为编译之后的代码(idea根据class文件翻译的)
image.png
那么为什么先声明后使用简化的静态初始化形式会出错呢?

int[] arr;
arr = {1,2,3};//报错

复制代码

这是因为,在编译器层面没有办法在编译的时候知道静态初始化中大括号的类型(编译器是逐句翻译,上下文无关的),这时候就没有办法加上相应的 new int[],因此就会报错。

本文使用 文章同步助手 同步

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享