java - StringUtils.join() 返回指针

java - StringUtils.join() returning pointer

我试图通过 Apache 公共库中的 StringUtils.join(array, separator) 方法连接数组的元素。谁能解释一下,如果我使用像 int[] 这样的原始类型数组,为什么我不能得到结果字符串,只能得到指向它位置的指针? 请参阅下面的示例代码:

public static void main(String[] args){

    String[] s = new String[]{"Anna","has", "apples"};
    System.out.println(StringUtilities.join(s, " "));

    int[] a = new int[]{1,2,3};
    System.out.println(StringUtilities.join(a, " "));

    Integer[] b = new Integer[]{1,2,3};
    System.out.println(StringUtilities.join(b, " "));
}

仅使用 Integer 数组有效。我知道基元数组在内部的处理方式与 ArrayList 或其他高阶对象不同,但是为什么可以(或多或少是相同的主题,但可能是不同的问题)实例化 HashMap<String, int[]> 而没有任何警告,异常?数组是否在内部包裹在另一个对象中?只针对地图?从我从文档中读到的内容中,您不能使用原始类型对映射、集合、数组列表等进行参数化,我理解这一点,但是……我发现它有点令人困惑。任何合理的解释将不胜感激。谢谢。

整数数组(基本类型)是一个对象。

我怀疑该实现不支持原始数组,并对它们调用 toString(),导致类似 [I@659e0bfd 的结果(转换为一维(只有一个 [Ints 数组及其 "memory location").

查看 StringUtils#joinint 数组的签名:

join(byte[] array, char separator)

您使用

呼叫了join
StringUtils.join(a, " "),

使用字符串而不是字符。 尝试使用

StringUtils.join(a, ' ')

相反。

你的电话与另一个签名匹配:

join(T... elements),

所以你的参数被解释为两个对象,一个整数数组和一个带有 space 字符的字符串。在创建结果字符串时,该方法将整数数组的字符串表示形式与字符串连接起来。