A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迷失的小Z 中级黑马   /  2014-11-25 19:50  /  944 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么只有字符数组直接变量名输出打印的不是地址值?

7 个回复

倒序浏览
感觉这个和c语言里的字符串定义差不多,字符数组就是一个字符串。所以一个字符串直接就可以输出了。
回复 使用道具 举报
原因在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方法,在这个方法里如果你传入的是一个字符数组的话,它会做遍历然后打印
回复 使用道具 举报
因为System.out对象有很多print方法,重载:参数类型有各种各样,有 7种基本类型,char [] , String,Object类型,所以在调用
char[] buf = {'a','b',c'};
println(buf);时,不会当做一个Object类型传进去,而是当做字符数组类型,就相当于调用了write(buf,0,len);
想打印的”地址值“可以调用println(buf.toString());
回复 使用道具 举报
kerner 发表于 2014-11-25 21:36
因为System.out对象有很多print方法,重载:参数类型有各种各样,有 7种基本类型,char [] , String,Objec ...

了解 thanks
回复 使用道具 举报
学习学习~~~
回复 使用道具 举报
我是进来观摩学习的。
回复 使用道具 举报
看看源码确实能解决很多疑问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马