知者为师! 在此请教各位老师一个问题,(这个问题已经百度过,但没有找到对应的答案)如下: 今天解决力扣算法题的时候自己发现的一个从来没有仔细研究的问题 先上关键代码 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);有什么区别?
str = c.toString() 在Java中c数组也是一个对象,该对象继承了Object,但是没有重写(override)Object类中的toString方法,所以根据对象的多态性,c.toString()调用的是Object类中的toString方法,参考源码如下: JDK源码中的Object类的toString方法 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。