You need to enable JavaScript to run this app. Java数组打印输出[I@xxx乱码问题排查与代码优化建议
优惠活动
大模型
产品
解决方案
定价
更多

Java数组打印输出[I@xxx乱码问题排查与代码优化建议

代码错误定位

异常输出的根本原因

你看到的[I@36baf30c[I@36baf30c,本质是两个拼接在一起的Java数组默认描述字符串,问题出在main方法的打印逻辑:

  • Java中数组是引用类型,直接把数组对象丢给System.out.print()时,不会输出数组存的实际元素,而是输出类似[I@内存哈希值的格式字符串——[I就代表这是一个int数组。
  • 当前循环跑了2次,每次都直接打印整个result数组对象,压根没取数组里存的最小值、最大值做输出,自然就出了两个连在一起的数组地址类字符串。

隐藏的运行时风险

findMinMax方法本身还有几个容易触发报错的隐患:

  • 无入参校验:如果传入的数组是null、数组长度为0、传入的长度参数n比数组实际长度大,会直接触发数组越界或者空指针异常。
  • 冗余长度参数:方法额外要求传数组长度n,但Java数组本身自带length属性,完全可以在方法内部直接获取,多传的参数不仅增加调用方负担,还可能出现传的n和实际数组长度不匹配的问题,比如数组实际长度是4,调用时传n=6,直接就会越界。
优化调整建议
  • 修正打印逻辑:把循环里的System.out.print(result)换成取数组下标的写法System.out.print(result[i] + " "),就能正确打印数组里的min和max;也可以直接引入Arrays.toString()方法,一行代码输出数组全部内容,不用手动写循环遍历。
  • 去掉冗余的n参数:方法内部直接用arr.length获取数组长度,减少传参带来的错误风险。
  • 加入前置入参校验:在方法开头判断数组合法性,遇到空数组或者null输入时抛出清晰的参数异常,避免随机抛出底层的越界错误。
  • 提升返回值可读性:现在用长度为2的数组存min和max,调用方得专门记下标0是最小值、下标1是最大值,可读性很差,可以封装一个带min、max字段的简单结果类,让返回值的语义更明确。
  • 长数组场景性能优化:如果要处理超长数组,可以换成逐对比较的策略:每次取相邻两个元素,先比出这俩里的小值和大值,小值拿去和当前min比,大值拿去和当前max比,整体比较次数能减少25%,长数组下性能提升很明显。
可正常运行的修正参考代码
import java.util.Arrays;

public class Hello {
    static int[] findMinMax(int arr[]) {
        // 入参合法性校验
        if (arr == null || arr.length == 0) {
            throw new IllegalArgumentException("输入数组不能为空");
        }
        int min = arr[0];
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            } else if (arr[i] > max) {
                max = arr[i];
            }
        }
        return new int[]{min, max};
    }

    public static void main(String[] args) {
        int[] arr = {22, 3, 5, 7, 9, 16};
        int[] result = findMinMax(arr);
        // 直接打印数组实际存储的内容
        System.out.println(Arrays.toString(result));
    }
}

内容的提问来源于stack exchange,提问作者Puja Kumari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 10:36:05