println()对象帮助声明。我的教授想要这个输出吗?

时间:2012-09-27 13:44:56

标签: java object

我的教授让我们修改她的实验室代码。特别是对于这个实验室,我的教授有一个println()声明,我不想触及:

ArrayCollection ac = new ArrayCollection(ARRAY_SIZE);

因此上面的代码实例化了一个名为ac的对象。哪个都很好,花花公子,但我的教授在她的代码中也有这个陈述,我无法修改:

System.out.println ("Collection contains:  " + ac);

因此,由于上面这一行,我得到了以下无用的输出:

  

收藏包含:   ArrayCollection {data = [Ljava.lang.Object; @ 24a20892,actualSize = 3}

上面的输出可以告诉我关于对象ac的信息?输出是完全无用的还是你认为这是我的教授本来想要的。对不起,我知道这是一个奇怪的问题,我很感激任何人的评论,为什么我的老师会像这样留下代码(她因为非常小的错误而获得分数>。<)。

编辑9:48 AM:

ArrayCollection ac包含:{5,10,20}用于我在上面发布的输出

6 个答案:

答案 0 :(得分:1)

查看JDK中AbstractCollection类的toString()方法。

public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }

它会做你可能期望看到的。

如果您不想“复制”逻辑,请从ArrayCollection继承AbstractCollection或直接使用ArrayList

答案 1 :(得分:1)

@之后的十六进制数是对象的哈希码 - 如果是对象的引用。这可能是她感兴趣的自动化测试。

答案 2 :(得分:0)

显然,您的教授希望打印集合的内容,而不是集合的参考。

以下是您可以这样做的方法:

  • 遍历集合的内容。

  • 在此循环中,在每个对象上调用toString()并在StringBuilder中累积结果字符串。

  • 打印此StringBuilder。

答案 3 :(得分:0)

它没有用,它给你以下数据:

ArrayCollection{data=[Ljava.lang.Object;@24a20892, actualSize=3}

你能查看每个参数......?

她正在延长CollectionCollections等级。

编辑:是的,请看AbstractCollection

答案 4 :(得分:0)

这里发生的是println输出ArrayCollection.toString()的返回值,这里给出的信息(假设她的实现是可靠的),类ArrayCollection至少有两个字段:data类型Object[]actualSize,可能是数字类型,此实例的值为3。

似乎有理由假设ArrayCollection是Java的Collection接口的实现,由一个包含实际元素的数组(data)支持。

答案 5 :(得分:0)

表达式"Collection contains: " + ac正在调用toString()对象上的ac方法,以获取ac对象的字符串表示形式。每当使用+将String与对象连接时,首先通过调用对象的toString()方法将对象转换为String。

我认为您的老师希望您修改ArrayCollection类,以便toString()生成格式良好的字符串表示。