知者为师!
在此请教各位老师一个问题,(这个问题已经百度过,但没有找到对应的答案)如下:
今天解决力扣算法题的时候自己发现的一个从来没有仔细研究的问题
先上关键代码
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);有什么区别?
Arrays.toString(c)
是按特定格式将数组转换成字符串,c.toString()
打印的就是c这个数组的地址0、你确定你的字符数组中有7个字符,而不是6个字符?
1、数组属于引用类型,其父类是Object,在Object类中的toString()方法返回的就是地址值,所以你str = c.toString();这行代码其实就是把c的地址值作为一个字符串赋给了str,而这个地址值的长度是11位。
2、Arrays类重写了Object中的toString方法,具体做法是遍历数组,将其中的内容依次打印,至于为什么长度是18 ,你把你那个打印结果从“[”到“]”包括空格和逗号在内数一数看总共是多少个。
3、这个问题1和2的回答已经说明了。