为何返回内存地址而非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()方法——该方法的默认实现就是返回类全名@十六进制哈希码的格式,并不是没有拿到目标对象。
解决方法
有两种常用方式可以得到预期的可读输出:
重写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,就会输出自定义的可读格式。打印时手动提取对象字段
如果无法修改Employee类,可以在打印时主动获取对象的属性值并输出:System.out.println("收入最低员工:姓名=" + minObj.getName() + ",收入=" + minObj.getIncome());
内容的提问来源于stack exchange,提问作者Pranjal
相关产品推荐
相关产品推荐

