Arraylist中不一样数据类型的添加以及printf的输出规则

  前两天被大哥问到一个问题,即如何实如今Integer类型的ArrayList数组中添加String类型的数据、在String类型的ArrayList数组中添加Integer类型的数据,而且他们在输出的过程当中会有什么问题,为何有这种问题。数组

  如下经过代码给你们展现一下:函数

  Integer中添加String类型:对象

  

  String类型中添加Integer类型:blog

  

  这二者代码基本一致,都是经过反射的方式将数据添加到数组中从而避免报错,可是在执行的过程当中却不同,如下是执行结果:List

    

  没错,在String类型的数组中添加Integer类型的数据在输出的时候发生了强制类型转换的错误,开始我也百思不得其解,后来我大哥给我看了看println函数的内部实现过程才焕然大悟,如下贴上代码:反射

这是非String类型的输出过程,能够看出,全部的输出对象都经过String.valueof方法转换成了String类型,故而Integer中加入String类型也都是经过String类型的方式输出,不会报错。  方法

  这是String类型的输出过程,能够看出,String类型的输出没有调用转换方法,那么在String类型的数组中添加了Integer以后,会将Integer类型的数据当中String来输出,天然会出现强制类型转换的错误。im

  

  以上纯属我的看法,若有不一样看法,敬请留言。d3

相关文章
相关标签/搜索