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