黑马程序员技术交流社区

标题: char数组遇到的一个问题! [打印本页]

作者: 余银桂    时间: 2012-6-23 02:03
标题: char数组遇到的一个问题!
本帖最后由 余银桂 于 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'};  这段代码在内存中是怎么分配的?
作者: 王涛    时间: 2012-6-23 02:21
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

作者: 曾_强    时间: 2012-6-23 04:16
这个原因主要是输出语句中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



作者: 余银桂    时间: 2012-6-23 11:55
谢谢了,昨晚自己没事也找了一下资料,大概知道了




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