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
的结果(转换为一维(只有一个 [
) I
nts 数组及其 "memory location").
查看 StringUtils#join
的 int
数组的签名:
join(byte[] array, char separator)
您使用
呼叫了join
StringUtils.join(a, " "),
使用字符串而不是字符。
尝试使用
StringUtils.join(a, ' ')
相反。
你的电话与另一个签名匹配:
join(T... elements),
所以你的参数被解释为两个对象,一个整数数组和一个带有 space 字符的字符串。在创建结果字符串时,该方法将整数数组的字符串表示形式与字符串连接起来。
我试图通过 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
的结果(转换为一维(只有一个 [
) I
nts 数组及其 "memory location").
查看 StringUtils#join
的 int
数组的签名:
join(byte[] array, char separator)
您使用
呼叫了join
StringUtils.join(a, " "),
使用字符串而不是字符。 尝试使用
StringUtils.join(a, ' ')
相反。
你的电话与另一个签名匹配:
join(T... elements),
所以你的参数被解释为两个对象,一个整数数组和一个带有 space 字符的字符串。在创建结果字符串时,该方法将整数数组的字符串表示形式与字符串连接起来。