My_Y 2020-03-08 22:47 采纳率: 50%
浏览 1072

直接toString获取的为什么是地址值而且使用Arrays.toString()获取的长度不对

知者为师!

在此请教各位老师一个问题,(这个问题已经百度过,但没有找到对应的答案)如下:

今天解决力扣算法题的时候自己发现的一个从来没有仔细研究的问题
先上关键代码

char[] c = str.toCharArray();//该字符数组中有7个字符

str = c.toString();

str1 = Arrays.toString(c);

System.out.println( str.length()); //返回str的长度是11

System.out.println("str= " + str); //直接打印str输出的是地址值[C@15db9742

System.out.println( str1.length()); //返回str1的长度是18

System.out.println("str1= " + str1); //直接打印str1输出的是str1= [9, 0, 1, 0, 0, 0]

问题如下:

1.为什么直接使用str = c.toString();后打印str的值获取的是一个地址值?

2.为什么使用str1 = Arrays.toString(c);后打印str1的长度是18?这18位的长度是7个字符加11位地址值吗?

3.直接使用c.toString();和 Arrays.toString(c);有什么区别?

  • 写回答

2条回答 默认 最新

  • 「已注销」 2020-03-09 23:08
    关注

    0、你确定你的字符数组中有7个字符,而不是6个字符?
    1、数组属于引用类型,其父类是Object,在Object类中的toString()方法返回的就是地址值,所以你str = c.toString();这行代码其实就是把c的地址值作为一个字符串赋给了str,而这个地址值的长度是11位。
    2、Arrays类重写了Object中的toString方法,具体做法是遍历数组,将其中的内容依次打印,至于为什么长度是18 ,你把你那个打印结果从“[”到“]”包括空格和逗号在内数一数看总共是多少个。
    3、这个问题1和2的回答已经说明了。

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)