java基础---Object类方法:equals和==,toString()方法
---equals方法
public boolean equals(Object obj)
{
return (this == obj);
}
比较的是地址,就是说object类的equals方法等同于==
---hashcode
Object类的hashCode()方法为不同的对象返回不同的值,Object类的hashCode值表示的是对象的地址。
---equals和hashcode的关系:是一种规定
两个对象相等 <=> equals()相等 => hashCode()相等。因此,重写equlas()方法必须重写hashCode()方法,以保证此逻辑严格成立,同时可以推理出:hasCode()不相等 => equals()不相等 <=> 两个对象不相等。
equals返回的是true和false
1.当equals返回true,那么要求hashcode的返回值两个对象相同
2.当equals返回false,hashcode可以相同可以不同。
hashcode相等是更小的一个条件,equals是更大的条件,大条件成立
要求小条件也成立。所以equals方法里面一定会用到hashcode()方法中的内容,比如说我
用了name属性去计算hashcode,那么equals判断中必须也使用到name属性。
===为什么需要hashcode()方法?
对象分布在散列表中,如果散列方法写得好,对象在表中的分布就会更加均匀,能够提高散列表的性能。
提升hash表的性能。比如插入一个新的entry到hashmap中,如果没有hashcode用来计算插入
位置,就得要遍历一遍,用equals判断是否有重复的键值。
================================================================
默认的toString()
public String toString()
{
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
object返回类型@哈希值
哈希值对于Object对象来说是内存地址,int类型toHexString转化为16进制无符号整数。
==============================================================
clone方法必须实现cloneable接口,是protected类
finalize()是没有实现的,为空。
==============================================================
===?
==运算符比较的到底是什么呢?==运算符作用在基本数据类型和作用在对象上有什么差别呢?
==符号比较的是值的大小
对于基本数据类型来说,方法栈中有n和m两个引用,同时指向了方法栈这种的0,m,n存的都是0的地址,所以相同
int n =0;
int m=0;
return n==m;//true
比较基本数据类型的时候比较的是值的大小。
对于对象来说,str_01和str_02的值是内存地址,但是这两个内存地址是不一样的,所以false
String str_01 = new String("abc");
String str_02 = new String("abc");
return str_01==str_02;//false
而作用在引用类型的时候比较的就是内存地址了。
比价常量池里面的东西的时候
String c = "abc";
String d = "abc";
System.out.println("c==d:" + (c==d));
System.out.println("c.equals(d):"+c.equals(d));
注意这里是常量池,也就是说两个引用同时都是指向了同一个内存区域。
object类有十二种方法
hashcode:对象的内存地址
equals:比较对象是否相等,比较内存地址
toString:返回类型名+hash地址
getclass:获取类型
clone:进行克隆
finalize:垃圾回收
wait(),wait(long),wait(long,int),notify(),notifyAll(),object构造函数