|
45 | 45 | - [Java异常类层次结构图](#java异常类层次结构图) |
46 | 46 | - [Trowable类常用方法](#trowable类常用方法) |
47 | 47 | - [异常处理总结](#异常处理总结) |
48 | | -- [33 Java序列话中如果有些字段不想进行序列化 怎么办](#33-java序列话中如果有些字段不想进行序列化-怎么办) |
| 48 | +- [33 Java序列化中如果有些字段不想进行序列化 怎么办](#33-java序列化中如果有些字段不想进行序列化-怎么办) |
49 | 49 |
|
50 | 50 |
|
51 | 51 | <!-- /MarkdownTOC --> |
@@ -198,7 +198,7 @@ String 中的对象是不可变的,也就可以理解为常量,线程安全 |
198 | 198 |
|
199 | 199 | **性能** |
200 | 200 |
|
201 | | -每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。 |
| 201 | +每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。 |
202 | 202 |
|
203 | 203 | **对于三者使用的总结:** |
204 | 204 | 1. 操作少量的数据 = String |
@@ -321,7 +321,7 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返 |
321 | 321 |
|
322 | 322 | **我们以"HashSet 如何检查重复"为例子来说明为什么要有 hashCode:** |
323 | 323 |
|
324 | | -当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用 equals()方法来检查 hashcode 相等的对象是否真的相同。如果两者相同,HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自我的Java启蒙书《Head fist java》第二版)。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。 |
| 324 | +当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用 equals()方法来检查 hashcode 相等的对象是否真的相同。如果两者相同,HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自我的Java启蒙书《Head first java》第二版)。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。 |
325 | 325 |
|
326 | 326 |
|
327 | 327 |
|
@@ -420,7 +420,7 @@ final关键字主要用在三个地方:变量、方法、类。 |
420 | 420 | 3. 程序所在的线程死亡。 |
421 | 421 | 4. 关闭CPU。 |
422 | 422 |
|
423 | | -## 33 Java序列话中如果有些字段不想进行序列化 怎么办 |
| 423 | +## 33 Java序列化中如果有些字段不想进行序列化 怎么办 |
424 | 424 |
|
425 | 425 | 对于不想进行序列化的变量,使用transient关键字修饰。 |
426 | 426 |
|
|
0 commit comments