黑马程序员技术交流社区

标题: 数组名地址输出char类型与其他类型的区别 [打印本页]

作者: hzjhjjyy    时间: 2013-12-8 16:47
标题: 数组名地址输出char类型与其他类型的区别
public class Demo{
        public static void main(String [] args)
       {
              char [] a=new char[10];
              int [] b=new int[10];
              System.out.println(a);
              System.out.println(b);
       }
}
        结果输出:

                      a的内容,即10个空字符
                      b的内存地址
        也试过了其他类型的输出,好像只有字符数组才会输出内容而不是其他类型那样的输出内存地址,为什么呢?

作者: 赵青超    时间: 2013-12-8 17:03
1、能输出char数组,是因为有重载的public void println(char x[]) 方法,你可以查看源码,能输出String,是因为有public void println(String s).
2、a的内容,不是空字符。
测试源码:
  1. /**
  2.          * 能输出char数组,是因为有重载的public void println(char x[]) 方法
  3.          * 源码
  4.          * public void println(char x[]) {
  5.                 synchronized (this) {
  6.             print(x);
  7.             newLine();
  8.         }
  9.     }
  10.          */
  11.         System.out.println(a); //测试
  12.         System.out.println(a.toString());//测试,输出了内存地址
  13.         System.out.println(b.toString());//测试,输出了内存地址
  14.         System.out.println(a[0]);//测试,输出第一个字符,默认值ASCII码中0对应的值
  15.         System.out.println((char)0);//测试,输出ASCII码中0对应的值
  16.         System.out.println(b[0]);////测试,输出第一个数字,默认值0
复制代码




作者: Weix1992    时间: 2013-12-8 17:12
println()方法有很多重载的public void println(char[] x),public void println(String x)等,你可以去看看

但是没有public void println(int[] i)这一个,所以在System.out.println(b);的时候其实是调用了b.toString方法
作者: 史超    时间: 2013-12-8 17:13
输出的地址是数组的地址,就像一个家的地址一样,你输入一个家的名字,计算机只能打印数组的名字,但是你要想知道家里有谁,你只能按照1,2,3,4,....将所有人遍历一遍,你才能知道家里有哪些东西
作者: 翼展哈哈    时间: 2013-12-8 17:30
这个问题,楼主可以查阅jdk文档,查阅顺序依次是:System类中的PrintStream out字段,然后是PrintStream类的println方法,你会找到 void println(char[] x) 方法,下面对它的解释是 “打印字符数组,然后终止该行”。也就是你在传给println方法字符型数组参数时,该方法会打印字符数组,而不是它的内存地址值。
希望可以帮到您!




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