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

Java中如何使用Stack.peek查看栈中对象实例的实际值?

解决Stack中peek()输出对象内存地址的问题

你看到的Dog@5eb5c224这种输出,和Stack的peek()方法无关——peek()已经正确返回了栈顶的Dog对象,问题出在Java对象默认的toString()行为:

所有Java类默认继承自Object类,而Object的toString()方法默认返回类名@十六进制哈希码格式的字符串,直接打印对象时就会输出这种“内存地址”样式的内容。

要让打印Dog对象时显示实际的name属性,只需要在你的Dog类里重写toString()方法即可:

class Dog {
    private String name;

    // 构造方法
    public Dog(String name) {
        this.name = name;
    }

    // 重写toString()方法,返回自定义内容
    @Override
    public String toString() {
        return "Dog{name='" + name + "'}";
        // 也可以直接返回name:return name; 按需选择
    }
}

修改后再运行你的Driver类代码,System.out.println(myStack.peek())就会输出Dog{name='jake'}(如果直接返回name则输出jake)。

额外补充两个实用建议:

  • 尽量用泛型声明Stack,比如Stack<Dog> myStack = new Stack<>();,这样peek()直接返回Dog类型,无需强制转换,类型更安全。
  • 如果不想重写toString(),也可以手动获取属性打印:System.out.println(((Dog)myStack.peek()).getName());,但需要给Dog类添加对应的getter方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:30:41