为什么
对于java中的list来说,如果list中的元素是基本类型或者String类型,那么sout(list)是可以直接打印出元素的,如果是对象类型,那么结果是XX@xxxx,原因如下:
对于ArrayList, 我们sout(list)时候,调用的是toString()方法,这个方法在jdk的api方法表中没有找到,那么一定是从父类继承过来的了。
然后我们进到AbstractCollection的toString方法定义中:
我们知道为什么打印list常常会放在[]里面了,然后继续进入String.ValueOf(Object)
我们发现最终还是调用list中每个元素的toString()方法打印的,这就是为什么一些基本数据类型和string类型可以打印看出内容了,然后继续跟进去
看到这里恍然大悟,为何对象类型的toString常常看到一大段字符串,原来是这样构成的。
怎么做
对于上述问题的追踪,那么我们如何才能详细打印出list中对象各个属性值的信息呢,
1 重写toString方法,输出key-value形式的数据
2 用google开源的lombok,加注释@Data,它自动帮你重写了toString方法。
数组array打印对象的方法:Arrays.toString(array);