You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java遍历打印ArrayList<Question>对象输出哈希码问题求助

问题原因

直接打印自定义类对象输出类名@哈希码是Object类toString()方法的默认行为,和类中包含String、String数组成员没有直接关系。你之前重写toString()未生效,通常是两个原因:

  • 重写的方法签名不符合要求,没有真正覆盖Object类的toString方法
  • 重写时直接拼接了数组类型的成员,数组本身的默认toString同样会输出哈希值格式内容
修复方案
  1. 首先在Question类中导入数组工具类:
    import java.util.Arrays;
  2. 在Question类中添加正确签名的toString重写方法,建议加上@Override注解,编译器会自动校验方法签名是否正确,避免写错。处理数组成员时必须用Arrays.toString()将数组转为可读字符串,不能直接拼接数组对象。
    修正后的完整Question类代码如下:
import java.util.Arrays;

public class Question{
    private String question;
    private String[] answers;
    public int answerPosition;
    
    public Question(String question, int size){
        this.question = question;
        this.answers = new String[size];
        answerPosition = 0;              
    }

    public void addAnswer(String answer){
        answers[answerPosition] = answer;
        answerPosition++;
    }

    @Override
    public String toString() {
        return "题目:" + question + "\n选项列表:" + Arrays.toString(answers);
    }
}
  1. 你现有的printQuestion()方法逻辑不需要修改,循环中直接调用System.out.println(question.get(i))时,会自动调用对象重写后的toString方法,输出你定义的业务内容。
常见无效重写的排查点
  • 方法名拼写错误:比如把toString写成ToString/tostring
  • 方法签名错误:加了多余参数、返回值类型不是String、访问修饰符不是public
  • 未重新编译:修改代码后没有全量重新编译,运行时加载的还是旧版本的class文件
  • 数组直接拼接:直接在返回值里拼answers数组,没有用Arrays.toString转换,会出现数组部分输出哈希值的问题

内容的提问来源于stack exchange,提问作者DaveM86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:00:58