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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北冥有鱼 中级黑马   /  2014-3-4 20:14  /  1315 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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

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

评分

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

查看全部评分

6 个回复

倒序浏览
对于数组来说打印的是数组[数组类型和hash值
但对char[]是例外:
     PrintStream已经有一个write(char[] buf)方法了,所以println(char[])会调用write方法把字符数组打印出来。

评分

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

查看全部评分

回复 使用道具 举报
打印的是地址值,内存分配的空间地址不一样,打印的当然不一样
回复 使用道具 举报
这是由他们的toString()函数决定的,当你采用System.out.println输出时,自动调用该方法,也就是说
  1. System.out.println(st1);
  2. System.out.println(st1.toString());
复制代码

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

评分

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

查看全部评分

回复 使用道具 举报
第一个是数组+数组的地址值,第二个是数组,第三个是数组的地址值
回复 使用道具 举报
数组初始化后就会创建于堆内存空间中,结果你也看到了它们的地址值,创建的类型不一样而且是三个数组,打印出的值肯定不一样;ps~你可以参考毕老师视频中数组的讲解。

评分

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

查看全部评分

回复 使用道具 举报
一个对象调用toString()方法返回的字符串的一般形式为:创建对象的类的名字@对象的引用的字符表示。toString()方法就是把对象转换成String类型,转换的算法根据类型和实际需要而定。所以可以根据自己的需求重写 public String toString()f方法。

评分

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

查看全部评分

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