繁体   English   中英

在ArrayList类中是否重写了toString()

[英]Is toString() overridden in ArrayList class

class Employee
{
    String name ;
    // Constructor 
    Employee(String name) {
        this.name = name;
    }
    // override toString method in Employee class
    @Override
    public String toString() {
        return name;
    }
}

public class TestArraylistIterator {

    public static void main(String[] args) {
        Employee obj1 = new Employee("Java");
        Employee obj2 = new Employee("Microsoft");

        TestArraylistIterator obj3 = new TestArraylistIterator();

        List ls = new ArrayList();
        ls.add(obj1);
        ls.add(obj2);               
        System.out.println("List object :: " + ls); 
        System.out.println("TestArraylistIterator :: " + obj3);     
    }
}

output : 
List object :: [Java, Microsoft]
TestArraylistIterator :: TestArraylistIterator@ad3ba4

因此问题是:如果我们尝试打印任何对象,它将打印obj.getClass()+“ @” + obj.hashCode()。 但是在打印列表对象时,它不会以相同的方式打印列表对象。 相反,它似乎已经在ArrayList类中重写了toString()。 但是在ArrayList API实现中没有找到类似的东西。 任何建议都可以。

否,但是在AbstractCollection重写了该方法, ArrayList是它的间接子类。

供将来参考:查看Java API文档时,在“方法摘要”下,可能有几个“从类SomeClass继承的方法”部分。 ArrayList文档中 ,它表明toString()是从AbstractCollection继承的。

该方法被覆盖。 如果您对rt.jar进行反编译(尽管您不必正常执行此操作),则会看到以下内容:

public String toString() {
    Iterator localIterator = iterator();
    if (!localIterator.hasNext()) {
        return "[]";
    }
    StringBuilder localStringBuilder = new StringBuilder();
    localStringBuilder.append('[');
    for (;;) {
        Object localObject = localIterator.next();
        localStringBuilder.append(localObject == this ? "(this Collection)" : localObject);
        if (!localIterator.hasNext()) {
            return ']';
        }
        localStringBuilder.append(',').append(' ');
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM