gpt4 book ai didi

关于Java Object你真的了解了吗

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章关于Java Object你真的了解了吗由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我一样,想好好的了解一下的。毕竟是基础中的基础.

下面给出一个简单比较全面的概要:

1. hashCode()和equals() 。

public boolean equals(Object obj) {return (this == obj);} 。

public native int hashCode(),

1.当equals()方法被override时,hashCode()也要被override. 。

2.当equals()返回true,hashcode一定相等。即:相等(相同)的对象必须具有相等的哈希码(或者散列码) 。

3.如果两个对象的hashCode相同,它们并不一定相同.

4.在集合查找时,hashcode能大大降低对象比较次数,提高查找效率! 。

在判断重复元素时,直接通过hashcode()方法,定位到桶位置,如果该位置有元素,再调用equals()方法判断是否相等。而不是遍历每一个元素比较equals()! 。

2. clone() 深复制 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class Animal implements Cloneable {
   private int height;
   private int age;
 
   public Animal( int height, int age){
     this .height = height;
     this .age = age;
   }
 
   @Override
   public Object clone() throws CloneNotSupportedException {
     return super .clone();
   }
}
 
 
public class People implements Cloneable {
   private int height;
   private int age;
   private Animal a;
 
   public People( int height, int age,Animal a){
     this .height = height;
     this .age = age;
     this .a = a;
   }
 
   @Override
   public Object clone() throws CloneNotSupportedException {
     People p = (People) super .clone();
     p.a = (Animal) a.clone();
     return p;
   }
 
}
 
Animal a1 = new Animal( 100 , 3 );
People p1 = new People( 173 , 24 ,a1);
//深复制
People p2 = (People) p1.clone();

3. wait()和notify() 。

•只有获得该对象锁之后才能调用,否则抛IllegalMonitorStateException异常 。

•任何一个时刻,对象的控制权(monitor)只能被一个线程拥有.

线程取得控制权的方法有三:

1. 执行对象的某个同步实例方法.

2. 执行对象对应类的同步静态方法.

3. 执行对该对象加同步锁的同步块.

执行对该对象加同步锁的示例:

?
1
2
3
4
synchronized (pepoleObject) {
   pepoleObject.notifyAll();
   pepoleObject.wait();
}

4. finalize() 。

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾加收器调用此方法,只能调用一次。当对象被回收时需要配置系统资源或执行其他清除,子类重写finalize方法实现.

以上这篇关于Java Object你真的了解了吗就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

最后此篇关于关于Java Object你真的了解了吗的文章就讲到这里了,如果你想了解更多关于关于Java Object你真的了解了吗的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com