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

Java OOP:队列添加乘客失效及显示对象地址问题求助

解决队列打印乘客对象显示airport.Passenger@xxxxxx的问题

嘿,这个问题我太熟了!你看到的airport.Passenger@55f96302其实不是队列添加功能失效——乘客已经成功加入队列了,只是Java默认的对象打印逻辑没输出你想要的信息而已。

问题根源

Java中所有类默认继承自Object类,而Object的toString()方法默认返回的是:

getClass().getName() + "@" + Integer.toHexString(hashCode())

也就是类的全限定名加上对象的哈希码值,所以你看到的是一串看似无意义的字符,而非乘客的具体信息。

解决方案:重写Passenger类的toString()方法

只需要在你的Passenger类中自定义toString()方法,把需要展示的乘客属性(比如姓名、航班号、座位号等)格式化输出即可。

举个示例代码:

package airport; // 对应你代码里的包名

public class Passenger {
    // 假设你的Passenger类有这些属性
    private String passengerName;
    private String flightId;
    private String seatNumber;

    // 构造方法、getter/setter 这里省略,你应该已经实现了

    // 重写toString()方法
    @Override
    public String toString() {
        return String.format("乘客: %s | 航班: %s | 座位: %s", 
                            passengerName, flightId, seatNumber);
    }
}

验证效果

当你再次打印队列时,无论是遍历队列逐个打印,还是直接打印队列对象,都会调用你重写的toString()方法,输出清晰的乘客信息:

// 示例主程序代码片段
Queue<Passenger> boardingQueue = new LinkedList<>();
boardingQueue.add(new Passenger("Alice", "MU5101", "22C"));
boardingQueue.add(new Passenger("Bob", "MU5101", "22D"));

// 打印队列
System.out.print("The queue: ");
for (Passenger p : boardingQueue) {
    System.out.print(p + " ");
}

输出结果会变成:

The queue: 乘客: Alice | 航班: MU5101 | 座位: 22C 乘客: Bob | 航班: MU5101 | 座位: 22D 

如果是直接打印队列对象System.out.println("The queue: " + boardingQueue);,输出也会是格式化后的乘客列表,因为LinkedList的toString()会自动遍历每个元素并调用其toString()方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:36:03