黑马程序员技术交流社区

标题: 数组小问题…… [打印本页]

作者: 迷失的小Z    时间: 2014-11-25 19:50
标题: 数组小问题……
为什么只有字符数组直接变量名输出打印的不是地址值?
作者: sunyeyu    时间: 2014-11-25 20:38
感觉这个和c语言里的字符串定义差不多,字符数组就是一个字符串。所以一个字符串直接就可以输出了。

作者: hailong    时间: 2014-11-25 21:02
原因在println上,这是原码
  1.     private void write(char buf[]) {
  2.         try {
  3.             synchronized (this) {
  4.                 ensureOpen();
  5.                 textOut.write(buf);
  6.                 textOut.flushBuffer();
  7.                 charOut.flushBuffer();
  8.                 if (autoFlush) {
  9.                     for (int i = 0; i < buf.length; i++)
  10.                         if (buf[i] == '\n')
  11.                             out.flush();
  12.                 }
  13.             }
  14.         }
  15.         catch (InterruptedIOException x) {
  16.             Thread.currentThread().interrupt();
  17.         }
  18.         catch (IOException x) {
  19.             trouble = true;
  20.         }
  21.     }
复制代码
println里面调用的这个write方法,在这个方法里如果你传入的是一个字符数组的话,它会做遍历然后打印
作者: kerner    时间: 2014-11-25 21:36
因为System.out对象有很多print方法,重载:参数类型有各种各样,有 7种基本类型,char [] , String,Object类型,所以在调用
char[] buf = {'a','b',c'};
println(buf);时,不会当做一个Object类型传进去,而是当做字符数组类型,就相当于调用了write(buf,0,len);
想打印的”地址值“可以调用println(buf.toString());
作者: 迷失的小Z    时间: 2014-11-25 22:30
kerner 发表于 2014-11-25 21:36
因为System.out对象有很多print方法,重载:参数类型有各种各样,有 7种基本类型,char [] , String,Objec ...

了解 thanks
作者: Tae丶Yeon    时间: 2014-11-25 23:24
学习学习~~~
作者: 阿穆隆    时间: 2014-11-25 23:44
我是进来观摩学习的。
作者: yninggis    时间: 2014-11-26 00:48
看看源码确实能解决很多疑问。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2