diff --git a/_posts/2022-06-21-java.md b/_posts/2022-06-21-java.md index 79c498a1..2f23a095 100644 --- a/_posts/2022-06-21-java.md +++ b/_posts/2022-06-21-java.md @@ -17,6 +17,36 @@ pin: true 反射:指动态获取的信息以及动态调用对象的方法的功能。在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性 +## Object 类的方法 +1. clone() +2. getClass() +3. toString() +4. finalize() +5. equals() +6. hashCode() +7. wait() +8. notify() +9. notifyAll() + + +### 双等号和 equals() 的区别 +1. 针对 String 引用数据类型,`==` 是用来判断两个对象的**引用**是否相等,而 `equals()` 是判断两个对象的**值**是否相等。 +2. 基本数据类型没有 `equals()` 方法 +3. 针对自定义对象而言,如果没有重写 `equals()` 方法,则两者没有区别,`equals()` 内部是通过 `==` 来判断。 + + +### 重写 equals() 为什么一定要重写 hashCode() + +1. 对比两个对象是否相等时,先使用 hashCode() 判断,再用 equals() 判断 +2. 相同的对象一定要有相同的哈希值 + +假设重写 equals() 但没有重写 hashCode(),并且因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行先后判断,如果没有重写 hashCode(),则直接认为两个对象不相等。 + + +### 为什么不直接使用 hashCode 就确定两个对象是否相等呢 + +这是因为不同对象的 hashCode 可能相同;但 hashCode 不同的对象一定不相等,所以使用 hashCode 可以起到快速初次判断对象是否相等的作用。 + # 内存结构 ![](https://img-blog.csdnimg.cn/cb59671dff1f4588b5d845f60874013b.png) @@ -304,7 +334,12 @@ Java NIO: ## 多线程 -## wait() 和 sleep() 区别 +### CompletableFuture + +CompletableFuture 最大的特点是支持函数式编程,可以通过回调的方式处理计算结果、链式组合异步任务等。当异步任务完成或者发生异常时,自动调用回调对象的回调方法。 + + +### wait() 和 sleep() 区别 1. sleep() 是 Thread 的静态方法,wait() 是 Object 的普通 final 方法 2. wait() 方法需要在synchronize块或者synchronize方法里调用,作用是释放锁,然而sleep不需要 3. sleep() 是休眠,wait() 是挂起