请教关于toString的问题,打印对象为什么不调用我重写的toString方法?

今天在学MyBatis的时候需要打印student对象,如下

public class Test {
    public static void main(String[] args) throws IOException{
        Reader reader = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();
        String statement = "entity.studentMapper.queryStudentByStuno";
        Student student = session.selectOne(statement,1);
        System.out.println(student);        
        session.close();    }
}

重写的toString方法为

public String toString() {
        return this.stuNo +","+this.stuName +","+this.stuAge+","+this.graName;
    }

输出结果为
entity.Student@35aea049
这应该是未重写的toString放法吧,可是我已经重写了toString而且显示了overrides,为什么不调用我重写的toString呢?
图片说明

Student类加上实现Serializable序列化接口,参考如下

public class  Student   implements Serializable     {
//serialVersionUID可以用ide自动生成
private static final long serialVersionUID = -983676524367844782L;
…
}



两个方法,上面那位已经说了 实现Serializable序列化接口;还有一个方法就是,打印的时候,手动调用toString()方法,这样也是可以的
System.out.println(student.toString());

package com.wangjing.util;

public class TestVO {

    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "TestVO 类 [id=" + id + ", name=" + name + "]";
    }

    public static void main(String[] args) {
        TestVO testVO = new TestVO();
        testVO.setId("111");
        testVO.setName("4560");
        System.err.println(testVO.toString());
    }
}