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

Java中需重写toString方法,成功后如何打印引用变量名?

你的理解完全正确!你看到的com.flight.Passenger@659e0bfd是Java中Object类默认toString()方法的输出——格式就是类全名@对象哈希码的十六进制值,所以必须重写toString()方法才能输出你想要的乘客名称信息。


一、重写toString()方法的示例

假设你的Passenger类包含一个name属性,重写方法可以这样写:

public class Passenger {
    private String name;

    // 构造方法、getter/setter按需添加
    public Passenger(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        // 两种可选格式,按需选择:
        // 1. 仅输出名称
        return name;
        // 2. 更清晰的对象描述格式
        // return "Passenger{name='" + name + "'}";
    }
}

这样当你打印Passenger对象时,就会直接输出Bob、Reeta这类名称,或者带类标识的结构化信息,再也不会出现默认的哈希码串了。


二、关于打印引用变量名的问题

很遗憾,Java无法直接通过对象获取它的引用变量名。因为一个对象可以被多个引用指向,比如:

Passenger p1 = new Passenger("Bob");
Passenger p2 = p1;

这里同一个对象同时被p1和p2引用,对象本身并不会存储任何引用变量的名称——JVM也不会把变量名和对象绑定在一起。

如果确实需要输出类似变量名的标识,你可以给Passenger类额外加一个属性,创建对象时手动传入变量名对应的字符串来模拟:

public class Passenger {
    private String name;
    private String refIdentifier; // 手动传入的引用标识

    public Passenger(String name, String refIdentifier) {
        this.name = name;
        this.refIdentifier = refIdentifier;
    }

    @Override
    public String toString() {
        return refIdentifier + " (name: " + name + ")";
    }
}

// 使用示例
Passenger Bob = new Passenger("Bob", "Bob");
Passenger Reeta = new Passenger("Reeta", "Reeta");
System.out.println(Bob); // 输出:Bob (name: Bob)

不过要注意,这只是手动传入的字符串,并非真正的引用变量名,只是实现了类似的显示效果而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:12:12