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

Java新手使用ArrayList打印内存地址而非输入值的问题求助

嘿,刚学Java ArrayList遇到这个问题太正常啦!你看到的“内存地址”其实是Java默认toString()方法的输出结果,咱们一步步把它搞定~

问题根源

所有Java类都继承自Object类,而Object的默认toString()方法会返回类名@哈希码的格式(看起来就像内存地址),这显然不是你想要的对象属性内容。另外我注意到你的Person类构造函数里还有个拼写错误——类属性是nName,但你代码里写的是nNombre = na...,这会导致属性没被正确赋值,得先修正这个小问题。

修正后的Person类

给Person类添加上重写的toString()方法,同时修正构造函数的拼写错误:

class Person {
    private String nName;
    private int nHour;
    private int nDay;
    private int nValues;

    // 修正构造函数的属性赋值错误
    public Person(int Day, int Hour, int Values, String Name) {
        nDay = Day;
        nHour = Hour;
        nValues = Values;
        nName = Name; // 这里之前写错成nNombre啦
    }

    // 重写toString(),返回可读的属性信息
    @Override
    public String toString() {
        return "Person{" +
                "姓名='" + nName + '\'' +
                ", 小时=" + nHour +
                ", 天数=" + nDay +
                ", 数值=" + nValues +
                '}';
    }
}

主类示例代码(用户输入+存储+打印)

下面是完整的主类代码,演示如何获取用户输入、存入ArrayList并打印出正确内容:

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        ArrayList<Person> personList = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);

        // 循环让用户输入3条示例数据(可以根据需求调整次数)
        for (int i = 0; i < 3; i++) {
            System.out.println("\n请输入第" + (i+1) + "个人的信息:");
            System.out.print("姓名:");
            String name = scanner.next();
            System.out.print("天数:");
            int day = scanner.nextInt();
            System.out.print("小时:");
            int hour = scanner.nextInt();
            System.out.print("数值:");
            int values = scanner.nextInt();

            // 创建Person对象并加入ArrayList
            personList.add(new Person(day, hour, values, name));
        }

        // 打印所有存储的信息
        System.out.println("\n你输入的所有信息如下:");
        for (Person person : personList) {
            System.out.println(person); // 自动调用重写后的toString()方法
        }

        scanner.close();
    }
}

现在运行代码,打印出来的就是你存入的具体属性内容,再也不是奇怪的“内存地址”啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:05:43