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
相关产品推荐
相关产品推荐

