Java中Object类型引用为何可以持有二维int基本类型数组的引用
Java基本类型数组赋值给Object变量的原理说明
你贴出的代码运行完全符合Java语法规范,不会抛出ClassCastException,核心原因是:Java中所有数组类型本身都是java.lang.Object的子类。
public class Sudoku { static int[][] game; public static void main(String[] args) { int [][] games= new int[3][3]; Object obj =games; } }
针对你的两个疑问分别解答:
- 疑问1:
games是二维int数组的引用,为何能赋值给Object类型的引用Java语言规范明确要求,所有数组类型(无论维度多少、元素是基本类型还是引用类型)都属于引用类型,默认继承自
java.lang.Object。此处将数组赋值给Object引用属于合法的向上转型,完全不会触发类型转换异常。
只有向下转型(父类引用转子类类型)且实际类型和目标类型不匹配时,才会抛出ClassCastException。 - 疑问2:int是基本类型,为何对应的数组可以赋值给Object类型变量
你混淆了数组元素的类型和数组本身的类型:
int是基本类型没错,但int[]、int[][]这类数组类型本身是引用类型,不属于基本类型。数组对象在堆内存中分配空间,同时支持调用Object类的所有公共方法(比如hashCode()、equals()、clone()等),也能佐证数组本身就是Object的子类实例。
你可以通过以下代码验证上述逻辑:
public class ArrayTypeTest { public static void main(String[] args) { int[][] games = new int[3][3]; // 输出true,证明二维int数组确实是Object的实例 System.out.println(games instanceof Object); // 可以正常调用Object类的方法 System.out.println(games.hashCode()); } }
内容的提问来源于stack exchange,提问作者abc123
相关产品推荐
相关产品推荐

