为什么用for遍历语句输出来是地址乱码

img

img

为什么用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方法,所以输出的会是对象的地址值。