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

