Java Object类方法

Java Object类方法

1、hashCode()和equale()函数用来判断对象是否相同
2、wait(),wait(long),wait(long,int),notify(),notifyAll()
3、toString()和getClass()
4、clone()
5、finalize()用于在垃圾回收

hashcode() 和 equals() 的区别

1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
2、如果两个对象不equals,他们的hashcode有可能相等。
3、如果两个对象hashcode相等,他们不一定equals。
4、如果两个对象hashcode不相等,他们一定不equals。

wait(),wait(long),wait(long,int),notify(),notifyAll()

注:在synchronize语句中使用
1、wait()用于让当前线程失去操作权限,当前线程进入等待序列
2、notify()用于随机通知一个持有对象的锁的线程获取操作权限
3、notifyAll()用于通知所有持有对象的锁的线程获取操作权限
4、wait(long) 和wait(long,int)用于设定下一次获取锁的距离当前释放锁的时间间隔

toString()和getClass()

1、toString()返回一个String对象,用来标识自己 ,Object如下
示例:getClass().getName() + “@” + Integer.toHexString(hashCode())
2、getClass()返回一个Class对象

clone()

1、浅拷贝,克隆当前对象,发生改变时,同步改变
2、深拷贝,复制当前对象,相互独立互不影响
参考:详解Java中的clone方法

finalize()

1、对象不一定会被回收
2、垃圾回收不是析构函数
3、垃圾回收只与内存有关
4、垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的

HashCode作用&重写

为什么要重写HashCode?
参考:详解重写equals()方法就必须重写hashCode()方法的原因

1、HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的
2、如果两个对象equals相等,那么这两个对象的HashCode一定也相同
3、如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写
4、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置

重写公式:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

示例:

@Override
public int hashCode() {
    int result = 17;
    result = 31 * result + mInt;
    result = 31 * result + (mBoolean ? 1 : 0);
    result = 31 * result + Float.floatToIntBits(mFloat);
    result = 31 * result + (int)(mLong ^ (mLong >>> 32));
    long mDoubleTemp = Double.doubleToLongBits(mDouble);
    result =31 * result + (int)(mDoubleTemp ^ (mDoubleTemp >>> 32));
    result = 31 * result + (mString == null ? 0 : mMsgContain.hashCode());
    result = 31 * result + (mObj == null ? 0 : mObj.hashCode());
    return result;
}

说明:

上述使用到的类型:
1、int直接相加
2、boolean使用1和0
3、long使用 long ^ (long >>> 32)
4、double则转为long使用long的方式
5、String直接使用它的hashcode
6、Object直接使用它的hashcode
参考于以下网址:
https://blog.csdn.net/neosmith/article/details/17068365
https://blog.csdn.net/sunmenggmail/article/details/18660699
https://blog.csdn.net/abinge317/article/details/51437179

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值