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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fengche 中级黑马   /  2013-10-16 11:49  /  1611 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 fengche 于 2013-10-17 13:27 编辑

  char[] numbers = {'1', '2', '3'};
        System.out.println(numbers);
System.out.println("ABC" + numbers);
打印结果
---------- java ----------
123
ABC[C@1224b90

Output completed (0 sec consumed) - Normal Termination

为什么在前面添加了一个字符串,就不能打印出数组中的值呢?

4 个回复

正序浏览
在字符串后面加上+号,此时的加号是字符串的连接,numbers是一个数组,要连接必须要数组强转成字符串,此时numbers是引用数据类型,在连接过程中他将内存地址与字符串进行连接
回复 使用道具 举报
System.out.println("ABC" + numbers);编译器把括号里的东西当做一个字符串打印出来了,numbers是一个数组,数组也是一个对象,当打印一个对象的时候相当于调用了对象的toString()方法。“[C@1224b90”“ ”[“表示这是一个数组,"[C"表示这是一个字符数组,后面数字表示他的hashCode,可以使用System.out.println("ABC" + Arrays.toString(numbers));打印出数组来,或者使用System.out.println("ABC" + new String(numbers));构造成字符串打印出来。
回复 使用道具 举报
首先你要知道有很多个println()的重载方法,第一次打印调用的是public void println(char[] x)此方法的行为就像先调用 print(char[]) 然后调用 println() 一样。 第二次因为数组前面有字符串,系统会先将和字符串连接的内容(引用类型和数据类型都一样)转换成字符串(也就是调用对象的toString()方法,对于你的代码来说返回值就是[C@1224b90)然后在整体打印出来。
要习惯查询jdk文档,不论你是新手还是老手。
希望对你有帮助。
回复 使用道具 举报
这是参数number的内存地址,这个视频中有详解,请楼主看下基础视频
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马