为什么用for遍历输出来是那种地址乱码,老师又要求必须用这种输出方式,谢谢帮忙看看
你打印的是对象,自定义类默认都继承了Object类,直接打印对象,其实调用的是:Object的toString()方法, getClass().getName() + "@" + Integer.toHexString(hashCode());即类名+内存地址。如果需要自定义打印内容,需要在Book类中重写toString(),即可打印自己想要的效果。
System.out.println(Object obj) 源码如下:
public void println(Object x) {
String s = String.valueOf(x);
if (getClass() == PrintStream.class) {
// need to apply String.valueOf again since first invocation
// might return null
writeln(String.valueOf(s));
} else {
synchronized (this) {
print(s);
newLine();
}
}
}
// String.valueOf(Object obj)
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
//obj.toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这个不是乱码,这打印出来的是地址值,你需要在Book类中重写toString方法,这样打印的就是具体内容了,而不是地址值了
你的Book对象没有重写toString方法,所以输出的会是对象的地址值。