0

我已经将arraylist定义如下:

ArrayList<Node> nodes = new ArrayList<Node>();

其中 Node 是一个类,它具有一种用于存储单个字符的字符数据类型。

输出显示一些垃圾值而不是打印字符:

这是一个代码片段。谁能解释为什么?

for(Node d : nodes){
    System.out.println(d);
}
4

3 回答 3

2

您的Node类不会覆盖该toString方法。这就是为什么调用默认实现,产生看起来像“垃圾”的原因。

在您的Node类中添加一个toString不带参数的方法,并返回一个String以特定于应用程序的方式描述节点内容的方法。这将修复输出。

于 2013-04-07T10:45:07.673 回答
0

除非您继承 ArrayList 并覆盖 toString 方法,否则只需在 ArrayList 上调用 println 将打印对象引用的地址(这是您看到的垃圾),而不是 arraylist 的实际内容。要获得您想要的结果,请使用:

System.out.println(Arrays.toString(nodes.toArray());

顺便说一句-其他人是正确的,您还需要覆盖节点类的 toString() 方法(通常,覆盖您设计的任何类的 toString() 方法始终是最佳实践)。

为了解决您在下面的评论中提到的问题:

public String toString(){
   return Character.toString(label);
 }
于 2013-04-07T10:44:20.690 回答
0

System.out.println(d)相当于System.out.println(d.toString())

如果你没有toString()在你的类中重新定义方法Node,java 会使用toString()你的对象继承的类的方法。

默认情况下,所有类都继承了Object方法toString()定义为的超类:

public String toString() {
      return getClass().getName() + "@" + Integer.toHexString(hashCode());
   }

这就是为什么它看起来像“垃圾”

于 2013-04-07T10:48:42.070 回答