码厨frog
2017-05-12 15:28
采纳率: 100%
浏览 3.0k
已采纳

java的ArrayList与print方法的问题

ArrayList arr = new ArrayList();
arr.add("aaa");
arr.add("bbb");
arr.add("ccc");
arr.add(10);
System.out.println(arr);
为什么结果是:[aaa, bbb, ccc, 10]
我猜测:因为print遇到ArrayList类型时会自动遍历该集合,并且调用集合的tostring方法进行打印。这里面前三个元素是String类型,调用toString()方法后打印出字符串的值,而对于int类型,调用toString方法打印出int的值。(但是都是object类型,object的toString方法不应该这样啊。)
所以到底是什么原因?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2017-05-12 15:56
    已采纳

    arr重写了toString,它会输出每个元素的toString,以及逗号和方括号

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • wings丶piaopiao 2017-05-13 04:13

    arraylist 重写了object的tostring 所以打印除arr每一个元素的tostring

    里面的元素的tostring 是每一个元素各自定义的tostring 这就是java的多态
    如果你再加入一个你自己定义的Person类但是没有定义tostring 那么这个Person对象的tostring 就会调用其父类object的tostring

    评论
    解决 无用
    打赏 举报
  • pqdong 2017-05-13 07:20

    首先理解System.out.println(Object)就能很好的理解这种情况。
    public void println(Object x)打印 Object,然后终止该行。
    此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,
    然后的行为如同先调用 print(String) 再调用 println() 一样。
    参数:
    x - 要打印的 Object。

    ---------------分割-----------------

    String.valueOf(Obiect x)
    public static String valueOf(Object obj)返回 Object 参数的字符串表示形式。
    参数:
    obj - 一个 Object。
    返回:
    如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
    另请参见:
    Object.toString()

    ArrayList 里重写toString方法,所以从此回溯便可以表层的理解每一步的原理。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题