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

为何返回内存地址而非Employee对象?问题排查与修正方法

问题:使用Stream获取Employee对象后输出内存地址而非预期内容

代码示例

Comparator<Employee> comparator = Comparator.comparing(Employee::getIncome);
Employee minObj = Employee.persons().stream()
                       .min(comparator)
                       .get();

现象

执行代码后,输出内容为类似 toMap.Employee@66133adc 的内存地址格式,而非预期的Employee对象可读信息。

原因分析

你已经正确获取到了Employee对象,出现这种输出是因为直接打印对象时,默认调用了Object类的toString()方法——该方法的默认实现就是返回类全名@十六进制哈希码的格式,并不是没有拿到目标对象。

解决方法

有两种常用方式可以得到预期的可读输出:

  1. 重写Employee类的toString()方法
    在Employee类中自定义toString()方法,把需要展示的字段包含进去,示例如下:

    public class Employee {
        // 类原有字段、getter/setter、构造方法等
        private String name;
        private double income;
    
        @Override
        public String toString() {
            return "Employee{name='" + name + "', income=" + income + "}";
        }
    }
    

    之后直接打印minObj,就会输出自定义的可读格式。

  2. 打印时手动提取对象字段
    如果无法修改Employee类,可以在打印时主动获取对象的属性值并输出:

    System.out.println("收入最低员工:姓名=" + minObj.getName() + ",收入=" + minObj.getIncome());
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:10:25