1、Object中的equals方法是对两个对象的地址值进行的比较(即比较引用是否相同),String类重写了equals方法,能够判断两个字符串包含的内容是否相同。
public boolean equals(Object obj){
return (this == obj);
}
2、hashCode方法给对象返回一个hashcode值。这个方法被用于hashtables,例如常用的hashMap
它的性质是:在一个Java应用的执行期间,如果一个对象提供给equals做比较的信息没有被修改的话,该对象多次调用hashCode()方法,该方法必须始终如一返回同一个值。
如果两个对象根据equals方法是相等的,那么调用二者各自的hashCode方法必须产生同一个integer值。
并不要求根据equals方法不相等的两个对象,调用二者各自的hashCode方法必须产生不同的integer结果值。这样有助于提高Hashtable的性能。
在JDK中,Object的hashCode方法是本地方法,也就是用c语言或c++实现的,该方法直接返回对象的内存地址。在String类,重写了hashCode方法
public int hashCode(){
int h = hash;//hash默认为0
if(h==0&&value.length>0){
char val[] = value;
for(int i=0;i<value.length;i++){
h = 31*h+val[i];
}
hash = h;
}
return h;
}
3、static关键字
static 关键子修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
被static关键字修饰的变量等,是随着类的加载而加载,并且只加载一次。
静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
能通过this访问静态成员变量。
static是不允许用来修饰局部变量
4、final关键字
可以声明成员变量方法类以及本地变量,String就是final类
final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误
final 变量是只读的,不能更改
final申明的方法不可以被子类的方法重写
final类通常功能是完整的,不能被继承
final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销
final 关键字提高了性能,JVM和Java应用都会缓存final变量,会对方法,变量及类进行优化
方法的内部类访问方法中的局部变量,但必须用final修饰才能访问