黑马程序员技术交流社区

标题: 关于toString的提问 [打印本页]

作者: a7228274    时间: 2015-8-9 17:29
标题: 关于toString的提问
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方法输出数组,但是为什么输出的是哈希值呢?
作者: godboy001    时间: 2015-8-9 21:56
不懂,知识掌握的不好,坐等大神来解答
作者: 谭威威威威    时间: 2015-8-9 22:16

作者: 一枚小小媛    时间: 2015-8-10 22:44
数组相当于是一个小容器,是引用的地址来存放元素。直接用System.out.println()打印,是不可以拿到每个元素的。(我以前也是犯这种错误)。
如果是单个的数组元素倒是可以这么获取并打印:例如 System.out.println(arr[?]);
那,如果要打印全部元素,一定一定要用遍历的方式!也就是for循环了。重要的东西要说三遍。
数组打印全部元素要用for循环遍历,
数组打印全部元素要用for循环遍历,
数组打印全部元素要用for循环遍历。
作者: 江峰    时间: 2015-8-10 23:05
暂时不懂,帮顶
作者: 耀阳圣尊    时间: 2015-8-11 11:02
你可以这么输出
  1. int a[] = {1,2,3,4};
  2.                
  3.                 System.out.println(Arrays.toString(a));
复制代码


如果您觉得我的回答还满意的话,请回复一下我
我的QQ:2355928351
如果您还有其他的入学前问题可以加我的QQ
作者: 18027587106    时间: 2015-8-11 11:23
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
7楼回答很好了,直接打印数组显示的可能是哈希值地址,要显示数组内容,还是要遍历,我也是看视频学得,加油
作者: RedProtector    时间: 2015-8-11 11:44
第二步只是把arr的值赋给了了toString方法里的参数,运算后生成的值赋给str,arr本身的值没变。
相当于:
toString(parameter);
parameter = arr;
所以第四步输出的是哈希值。
作者: zby_allan    时间: 2015-8-12 22:30
我分析因为参数也是在栈里面临时创建的引用,并不是对象本身。
作者: burningzzy    时间: 2015-8-12 23:09
同意七楼的回答。




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