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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a7228274 中级黑马   /  2015-8-9 17:29  /  350 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、int[ ] arr= {1,2,3,4,5,6};
2、String str=Arrays.toString(arr);
3、System.out.println(str);//调用了String的toString方法
4、System.out.println(arr); //输出的是哈希值
问一下,arr数组是引用类型,把引用类型传递参数,是会改变原来的,这里第二步把arr传入了toString,那么原来的arr不就应该变为字符串吗,那么第四步应该调用String的toString方法输出数组,但是为什么输出的是哈希值呢?

10 个回复

倒序浏览
不懂,知识掌握的不好,坐等大神来解答
回复 使用道具 举报
回复 使用道具 举报
数组相当于是一个小容器,是引用的地址来存放元素。直接用System.out.println()打印,是不可以拿到每个元素的。(我以前也是犯这种错误)。
如果是单个的数组元素倒是可以这么获取并打印:例如 System.out.println(arr[?]);
那,如果要打印全部元素,一定一定要用遍历的方式!也就是for循环了。重要的东西要说三遍。
数组打印全部元素要用for循环遍历,
数组打印全部元素要用for循环遍历,
数组打印全部元素要用for循环遍历。
回复 使用道具 举报
暂时不懂,帮顶
回复 使用道具 举报
你可以这么输出
  1. int a[] = {1,2,3,4};
  2.                
  3.                 System.out.println(Arrays.toString(a));
复制代码


如果您觉得我的回答还满意的话,请回复一下我
我的QQ:2355928351
如果您还有其他的入学前问题可以加我的QQ
回复 使用道具 举报
1、int[ ] arr= {1,2,3,4,5,6};
2、String str=Arrays.toString(arr);
3、System.out.println(str);//调用了String的toString方法
4、System.out.println(arr); //输出的是哈希值
第一步你只是定义了一个数组
第二步你定义了一个字符串来表示你数组中的内容
第三步打印常量内存中字符串
第四步打印数组的内存地址
其实第二步中的arr的内容就是第四步中打印的地址,然后通过Arrays类调用toString()方法找到堆中的内容
回复 使用道具 举报
a348639336 来自手机 中级黑马 2015-8-11 11:34:31
8#
7楼回答很好了,直接打印数组显示的可能是哈希值地址,要显示数组内容,还是要遍历,我也是看视频学得,加油
回复 使用道具 举报
第二步只是把arr的值赋给了了toString方法里的参数,运算后生成的值赋给str,arr本身的值没变。
相当于:
toString(parameter);
parameter = arr;
所以第四步输出的是哈希值。
回复 使用道具 举报
我分析因为参数也是在栈里面临时创建的引用,并不是对象本身。
回复 使用道具 举报
同意七楼的回答。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马