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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余银桂 中级黑马   /  2012-6-23 02:03  /  2473 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余银桂 于 2012-6-23 11:55 编辑
  1. public class  Test6

  2. {

  3.       public static void  main(String args[])
  4.       {
  5.               char[] c1= new char[]{'1','2','3'};
  6.               System.out.println(c1);
  7.               }   
  8. }
复制代码
首先我想问的是 char数组和 其它数组有啥区别?

这段代码我运行的结果居然是 123

按照int数组,运行结果应该是对应的地址值

char [] c1 = new char[]{'1','2','3'};  这段代码在内存中是怎么分配的?

4 个回复

倒序浏览
String.valueOf、StringBuffer.append以及System.out.print中都对char[]数组进行了的单独处理,
即进行了重载,使之可以输出内容,而不是地址。

但是字符串拼接操作没有对char[]数组单独处理,所以它处理的是数组char[]的地址
看下面的代码:
public class CharTestDemo{
    public static void main(String[] args){
        String letters = "abc";
        char[] numbers = {'1', '2', '3'};
        System.out.println(letters + "    " + numbers);
                //System.out.println( numbers);
    }
}
这个输出的就是abc   [C@c17164
回复 使用道具 举报
这个原因主要是输出语句中System.out.println中调用了PrintStream类中的println(char x[])方法,当是字符数组时,直接将字符数组元素打印出来。只是恰好System类中的打印方法PrintStream可以直接打印字符数组类型。
源文件代码如下:传入为char  x[]数组时
  1. public void println(char x[]) {
  2.         synchronized (this) {
  3.             print(x);
  4.             newLine();
  5.         }
  6.     }
复制代码
传入为char buf[] 数组时:
  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.                 }}}}
复制代码
还有 char s[]时:
  1. public void print(char s[]) {
  2.         write(s);
  3.     }
复制代码
另外:只能是 System.out.println(c1); 能够将字符数组按元素打印出来。即输出:123;
若是 System.out.println("c1="+c1); 此时则不能将元素输出。结果将为charl类型数组的哈希值:c1=[C@51da6868


回复 使用道具 举报
谢谢了,昨晚自己没事也找了一下资料,大概知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马