黑马程序员技术交流社区

标题: 数组的问题 [打印本页]

作者: 赵乐    时间: 2013-6-6 15:41
标题: 数组的问题
本帖最后由 赵乐 于 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型的数组打印的事地址,而字符数组就可以直接打印。。 我记得毕老师好像说过,但我忘了。
还有都有什么类型可以直接打印。。


作者: 花心々小土豆    时间: 2013-6-6 19:25
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 21:02
花心々小土豆 发表于 2013-6-6 19:25
arr数组名(引用数据类型),所以System.out.println(arr);打印的是由哈希算法得到的地址。
为什么System.o ...

幸好,我今天IO学的也差不多了,不然一时半会理解不了。。  谢谢了
作者: Household    时间: 2013-12-8 00:46
String是java中的一个类,所以一定会重载toString()函数,故toString()会返回其本身。所以直接打印String类的对象会输出具体字符串(就像其他所有类一样)。字符型数组在内存中的储存方式同String类一样,故输出数组名并不是输出数组首地址,而是直接输出数组内容直到/0;而整形数组只是整形的集合,所以其数组名仅仅是其首地址,我们必须要用for的嵌套循环才能完整的输出整个整形数组;




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