java - StringUtils.join()返回指针

时间:2015-04-28 11:47:34

标签: java types return-value primitive

我试图通过Apache commons库中的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[]>而没有任何警告,例外?数组内部是否包含在另一个对象中?仅适用于地图?根据我从文档中读到的内容,您无法使用原始类型对地图,集合,数组列表等进行参数化,这是我理解的,但后来......我发现它有点令人困惑。任何合理的解释将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:6)

查看StringUtils#join的{​​{1}}数组的签名:

join(byte[] array, char separator)

您使用

致电join
StringUtils.join(a, " "),

使用String而不是char。 尝试使用

StringUtils.join(a, ' ')

代替。

发生的事情是你的电话与另一个签名匹配:

join(T... elements),

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

答案 1 :(得分:4)

一个int(基元)数组是一个对象。

我怀疑实现不支持原始数组,并在它们上调用toString(),导致类似[I@659e0bfd(转换为单维(只有一个[)数组I nts及其&#34;内存位置&#34;)。