JAVA equal和hashCode

Java程序中,==、equals是经常被拿来问的问题。在没有遇到具体的业务开发要求的时候,并没有对其有深刻的认识!直到最近。
会用到equals的业务场景:
某个类的实例(对象)再做对比(比较属性值)时候使用。
有一篇文章将的特别好,传送门
文章具体细节不再做解释。==和equals的区别,最后引申出Java中地址和值得问题。又引申出hashCode这个Object的native方法。
那么当类的属性比较少的时候,手工@Override equals和hashCode方法即可。那属性比较多的时候呢?(或者是我就想偷懒)
那就可以使用集成开发工具(eclipse、idea)自动构造生成代码!
如图:
JAVA equal和hashCode
JAVA equal和hashCode
JAVA equal和hashCode
JAVA equal和hashCode
JAVA equal和hashCode
JAVA equal和hashCode
(我也想直接贴代码,奈何……)

再抛出一个问题:hashCode中为什么用31×result?