浏览 1513 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-01
无意看到有人在问,为什么
char[] ca={'1','2','3'}; int[] ia={1,2,3}; System.out.print(cs); System.out.print(ia); 得到是截然不同的结果,char[]输出了数组元素而int[]输出了引用地址,怀着好事心情,跟进一看System.out的这个out定义为:
public final static PrintStream out = nullPrintStream(); 接着看PrintStream的print/println存在较多的重载,比较眼尖一下就看到print(char[] s[])以及print(Object x),未看到针对其它类型数组的重载,至此至少发现是这区别导致不同的输出结果。 如你所知,数组也是Object,对于非char[]类型数组,都使用print(Object x),这个方法最终使用的是String.valueOf(x),即x.toString(),所以对于非char数组输出引用地址就不中为奇了。 对于print(char[] s),跟到最后发现是使用 sun.nio.cs.StreamEncoder.write(char[] cbuf, int off, int len)方法,配合CharBuffer来完成的,具体可以查看该方法实现。 是否有其它方法让非char[]数组也能便捷的输出元素呢,当然,使用java.utils.Arrays.toString(x);即可
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |