从Sun的Java Tutorial开始,我认为这段代码会将一个集合转换为一个数组。
import java.util.*;
public class Blagh {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
String[] array = set.toArray(new String[0]);
System.out.println(set);
System.out.println(array);
}
}
然而,这给出了
[a, c, b]
[Ljava.lang.String;@9b49e6
我误解了什么?
答案 0 :(得分:32)
代码工作正常。
替换:
System.out.println(array);
使用:
System.out.println(Arrays.toString(array));
输出:
[b, c, a] [b, c, a]
数组的String
表示显示数组的“文本表示”,由Object.toString
获得 - 这是类名和数组的哈希码作为十六进制字符串。
答案 1 :(得分:9)
为了完整性检查,java.util.Arrays.toString和java.util.Arrays.deepToString也是如此。
后者在处理时特别有用 嵌套数组(如Object [] [])。
答案 2 :(得分:5)
没关系。
您没有看到System.out.println(array)的数组内容,因为println 调用object.toString()从Object获取输出的字节。
由于HashSet会覆盖默认的toString()实现,因此您可以使用System.out.println(set)查看设置内容;
由于数组没有覆盖默认的toString()(它给出类名和某种身份哈希码),你得到模糊[Ljava.lang.String; @ 9b49e6
希望有所帮助
答案 3 :(得分:2)
正如dfa所说,你可以替换:
System.out.println(array);
...与
System.out.println(Arrays.toString(array));
答案 4 :(得分:1)
我认为你没有误解任何事情;代码应该工作。但是,该数组不够智能,无法在toString方法中打印其内容,因此您必须使用
打印内容。for(String s : array) println(s);
或类似的东西。
答案 5 :(得分:0)
您的结果正确无误。不幸的是,数组上的toString()方法仍然是原始的Object.toString(),因此默认情况下输出有些不可用,但适用于所有数组。