Skip to content

Commit

Permalink
Update 2022-06-21-java.md
Browse files Browse the repository at this point in the history
  • Loading branch information
CompetitiveLin committed Dec 4, 2024
1 parent 7345c2c commit b7ffee3
Showing 1 changed file with 36 additions and 1 deletion.
37 changes: 36 additions & 1 deletion _posts/2022-06-21-java.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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() 是挂起
Expand Down

0 comments on commit b7ffee3

Please sign in to comment.