**1.原因是object.java类是所有类的基类,称为父类/超类,java中所有的类都会继承该类,而该类的toString方法打印的就是内存地址.当System.out.println(X)的时候,实际打印的就是X.toString()方法的内容,如果X元素没有重写toString()方法那么就是内存地址值,如果重写了就是数组类型的字符串,**至于System.out.println(X)方法为什么会打印的就是X.toString()的内容,在下面以list和array做详细介绍.
2.list中打印的确是数组类型的字符串,原因是list类继承自下图中的AbstractList类,
该类又继承了AbstractCollection类,该类重写了toString方法.返回的是数组类型的字符串,如下图所示:
因此,list也继承了重写后的toString()方法.
我们再看一下System.out.println()方法,进入到println()方法发现,他打印的就是元素的toString()的内容,如下图所示:
进入上图方法中,点击valueof()方法,进入到下图中:
我们发现,其实System,out.println()方法打印的就是传入的该元素的toString()的值,在结合list中已经重写了该方法,因此打印的是数组类型的字符串.
3.数组为什么重写后还是内存地址,必须要用Ayyays.toString(数组)才能打印数组类型的字符串?
原因与list中原因是一致的,因为数组的Arrays类重写了toString()方法,而本身创建的数组没有重写toString()的方法,因此打印出来的就是内存值.
为什么list输出是数组类型的字符串而数组却是内存地址?
最新推荐文章于 2024-02-29 16:40:46 发布