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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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的内存地址
        也试过了其他类型的输出,好像只有字符数组才会输出内容而不是其他类型那样的输出内存地址,为什么呢?

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

4 个回复

倒序浏览
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
复制代码



评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报 1 0
println()方法有很多重载的public void println(char[] x),public void println(String x)等,你可以去看看

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马