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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵乐 中级黑马   /  2013-6-6 15:41  /  1802 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵乐 于 2013-6-6 21:03 编辑

class Demo
{
        public static void main(String[] args)
        {
                int[] arr = {1,2,3};
                char[] ch = {'a','b','c'};
               
                System.out.println(arr);//打印的是数组在内存中的地址
                System.out.println(ch);//打印的是abc
        }
}

想问下为什么 int型的数组打印的事地址,而字符数组就可以直接打印。。 我记得毕老师好像说过,但我忘了。
还有都有什么类型可以直接打印。。

评分

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

查看全部评分

3 个回复

倒序浏览
arr数组名(引用数据类型),所以System.out.println(arr);打印的是由哈希算法得到的地址。
为什么System.out.println(ch);打印的是abc?
先看下这个例子
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str="abc";
  6.                 System.out.println(str);
  7.         }
  8. }
复制代码
打印结果是:abc                  这应该能想通的
重点来了::字符串和字符类型数组啥关系?字符串就是一个字符类型的数组。
String str="abc";    等效于:char[] ch ={'a','b','c'};  String str = new String(ch);
System.out.println(ch);相当于System.out.println("abc");
虽然System.out.println(ch);调用的是PrintStream类(System.out对象所属的类)的println(char[])方法,System.out.println("abc");调用的是PrintStream类的println(String)方法,但他们底层都是按照平台的默认字符编码将字符串的字符转换为字节,并完全以 write(int) 方法的方式写入这些字节。
以前只是知道这种输出结果,刚查了看了点书查了下API文档,终于给弄明白了,分享下!
回复 使用道具 举报
花心々小土豆 发表于 2013-6-6 19:25
arr数组名(引用数据类型),所以System.out.println(arr);打印的是由哈希算法得到的地址。
为什么System.o ...

幸好,我今天IO学的也差不多了,不然一时半会理解不了。。  谢谢了
回复 使用道具 举报
String是java中的一个类,所以一定会重载toString()函数,故toString()会返回其本身。所以直接打印String类的对象会输出具体字符串(就像其他所有类一样)。字符型数组在内存中的储存方式同String类一样,故输出数组名并不是输出数组首地址,而是直接输出数组内容直到/0;而整形数组只是整形的集合,所以其数组名仅仅是其首地址,我们必须要用for的嵌套循环才能完整的输出整个整形数组;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马