黑马程序员技术交流社区

标题: 关于直接打印数组问题 [打印本页]

作者: 北冥有鱼    时间: 2014-3-4 20:14
标题: 关于直接打印数组问题
  1. String[] st1={"sd","fgr","geds"};
  2.                 char[] st2={'s','d','f'};
  3.                 int[] st3={1,2,43};
  4.                 System.out.println(st1);
  5.                 System.out.println(st2);
  6.                 System.out.println(st3);
复制代码




现有代码如上, 输出结果如下:

[Ljava.lang.String;@18f5824
sdf
[I@1e3cd51

这三种数据类型,同样的直接打印数组名称,结果问什么都不相同?


作者: e.c    时间: 2014-3-4 20:34
对于数组来说打印的是数组[数组类型和hash值
但对char[]是例外:
     PrintStream已经有一个write(char[] buf)方法了,所以println(char[])会调用write方法把字符数组打印出来。
作者: Aimer_WJY    时间: 2014-3-4 21:34
打印的是地址值,内存分配的空间地址不一样,打印的当然不一样
作者: Amorvos    时间: 2014-3-4 22:04
这是由他们的toString()函数决定的,当你采用System.out.println输出时,自动调用该方法,也就是说
  1. System.out.println(st1);
  2. System.out.println(st1.toString());
复制代码

这两行代码意义完全一样。由于你是用的String,char,int,他们本身具有的toSting方法输出的效果就是你看到的。
你自己写的类,只有你重写该方能功法时才会输出不一样的内容。

作者: love~陌    时间: 2014-3-5 15:51
第一个是数组+数组的地址值,第二个是数组,第三个是数组的地址值
作者: wxk105    时间: 2014-3-5 16:10
数组初始化后就会创建于堆内存空间中,结果你也看到了它们的地址值,创建的类型不一样而且是三个数组,打印出的值肯定不一样;ps~你可以参考毕老师视频中数组的讲解。
作者: 小脚印    时间: 2014-3-5 17:26
一个对象调用toString()方法返回的字符串的一般形式为:创建对象的类的名字@对象的引用的字符表示。toString()方法就是把对象转换成String类型,转换的算法根据类型和实际需要而定。所以可以根据自己的需求重写 public String toString()f方法。




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