You need to enable JavaScript to run this app. Java中向ArrayList<自定义类>添加元素后打印对象字符串属性的方法
优惠活动
大模型
产品
解决方案
定价
更多

Java中向ArrayList<自定义类>添加元素后打印对象字符串属性的方法

自定义类集合遍历打印输出内存地址的解决方法

问题场景

  • 实际开发需求:创建包含字符串属性的自定义类(示例中为Token类),在同包其他类中创建ArrayList<Token>集合存储该类的实例对象,需要打印每次创建对象时传入的字符串参数(例如new Token("Hello")中的"Hello")。
  • 异常表现:遍历集合并直接打印对象时,输出结果为类路径拼接哈希值的内存地址形式,无法获取存储的字符串值。
  • 现有代码片段:
Token j = new Token(part); // Token为前述的自定义类类型
tokenfinal.add(j); // tokenfinal为ArrayList<Token>类型的集合

// Token类定义
public class Token {
    public String tok;
    
    public Token(String tok) { 
        this.tok = tok;

问题根因

Java中所有类默认继承java.lang.Object基类,当直接打印对象引用时,会自动调用Object类中默认实现的toString()方法,该方法的输出规则为「类全限定名@对象哈希值十六进制字符串」,也就是看到的内存地址格式输出,该行为和集合存储的类型没有关联。

可落地的解决方案

  • 方案1:遍历集合时直接访问类的公开字符串属性
    由于示例中Token类的tok属性为public修饰,可在遍历过程中直接读取属性值输出,无需修改原有类定义:
// 遍历集合的执行代码
for (Token item : tokenfinal) {
    // 直接访问公开的tok属性,输出构造时传入的字符串
    System.out.println(item.tok);
}
  • 方案2:为自定义类重写toString()方法
    这是Java自定义类的通用编码规范,重写后直接打印对象即可输出自定义的内容,不需要每次遍历都手动读取属性:
// 补充完善后的Token类定义
public class Token {
    public String tok;
    
    public Token(String tok) { 
        this.tok = tok;
    }

    // 重写toString方法,自定义对象打印时的输出规则
    @Override
    public String toString() {
        // 直接返回存储的字符串属性作为输出内容
        return tok;
    }
}

完成方法重写后,遍历集合时直接打印对象即可得到目标字符串输出:

for (Token item : tokenfinal) {
    // 直接打印item对象,会自动调用重写的toString方法输出tok值
    System.out.println(item);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 23:24:03