Java中的Hashcode()方法
hashcode方法返回一个对象的的哈希码值,hashCode是所有java对象的固有方法,如果不重写的话,返回的实际上是该对象在jvm的堆上的内存地址,而不同对象的内存地址肯定不同,所以这个hashCode也就肯定不同了。如果重写了的话,由于采用的算法的问题,有可能导致两个不同对象的hashCode相同。
切记:Hashcode()方法如果不重写的话不同对象的hashcode()返回的值是不同的。
在使用spring框架编写程序时,踩了一个隐藏的坑:
使用lombok插件,程序会自动生成属性的set、get方法和构造器,以及重写tostring,Hashcode等方法。
@Configuration
@AllArgsConstructor
@NoArgsConstructor
@Scope("prototype")
@Data //lombok插件
public class User {
@Value("韩信")
private String name;
@Value("22")
private int age;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
于是当我测试Bean的singleton(多次调用同一个bean只会生成一个对象)和prototype(多次调用同一个bean会生成多个不同的对象)的作用域时,调用了bean对象的Hashcode方法,发现无论作用域是singleton还是prototype,同一个bean的多次调用的对象的Hashcode值都是相同的。