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

Java含混合类型与int数组的ArrayList元素访问、打印及循环实现问题

针对你遇到的Java开发问题的具体解答

1. 不通过循环从ArrayList内嵌int数组中获取指定值

  • 只要你明确知道目标值在int数组中的固定下标,完全不需要循环就能拿到值:
    1. 先定位到ArrayList中存储int数组的位置(你的例子里是下标为2的元素),将该位置的Object类型元素强转回int[]类型
    2. 直接通过数组下标访问对应值即可
  • 甚至可以用一行代码一步取出目标值,不需要定义中间变量:
    // 直接拿到数组中下标为2的元素,也就是你要的55
    int targetValue = ((int[]) strangeList.get(2))[2];
    
  • 注意:如果不知道目标值在数组里的固定下标,不管是不是嵌套在ArrayList中,都需要遍历数组才能匹配到目标值,这和ArrayList本身的存储结构无关。

2. int数组输出显示[I@2401f4c3的原因和解决方法

  • 出现这类地址格式输出的原因:Java中的数组是JVM层面的特殊对象,默认继承Object类的toString()实现,输出格式就是「类型标识@对象哈希值」,其中[I就代表int类型数组,后面的十六进制串是对象的内存地址。
  • 完全不需要重写数组的toString方法:Java的数组类型是不可被继承的,你根本无法创建自定义数组子类来重写它的方法,强行实现反而会抛出语法错误。
  • 正确输出数组实际内容的方式:
    调用JDK自带的Arrays.toString()工具方法即可,传入数组对象就会按照[元素1, 元素2, ...]的格式输出内容,比如:
    // 提前导入java.util.Arrays类
    int[] embeddedArr = (int[]) strangeList.get(2);
    System.out.println(Arrays.toString(embeddedArr));
    // 输出结果:[329, 23882, 55, 932]
    

3. for循环打印逻辑仅输出1次数组内容的问题

  • 先逐行拆解你现有代码的实际执行逻辑,就能找到问题根源:
    1. 外层循环遍历ArrayList的下标i,取值范围是0、1、2(因为列表长度为3)
    2. 循环内部的判断条件是i == 2,也就是只有当i取到2的时候,才会进入内层循环
    3. 你写的内层循环是遍历ArrayList本身的下标j,取值范围是0、1、2,每次打印对应位置的列表元素——也就是依次打印字符串"String"、整数3823、整个int数组对象本身
  • 这种逻辑下,你根本没有进入数组内部遍历它的4个元素,只是把整个数组对象作为列表的一个元素打印了1次,自然达不到预期的打印4次数组内容的效果。另外你内层循环的边界选错了,用了ArrayList的长度3,而不是int数组本身的长度4,从范围上就不可能遍历到4个元素。
  • 修正后的核心逻辑:当定位到列表里的数组元素时,先把元素强转回int数组类型,再内层遍历数组本身的长度范围,逐次打印数组元素,代码示例:
    for (int i = 0; i < strangeList.size(); i++) {
        // 定位到存储int数组的列表位置
        if (i == 2) {
            int[] arr = (int[]) strangeList.get(i);
            // 内层循环遍历数组的4个元素,逐个打印
            for (int j = 0; j < arr.length; j++) {
                System.out.println(arr[j]);
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者E.Y.309

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 00:15:00