You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:36:04