11
11
- [ 1.1.2.2. JDK 和 JRE] ( #1122-jdk-和-jre )
12
12
- [ 1.1.3. Oracle JDK 和 OpenJDK 的对比] ( #113-oracle-jdk-和-openjdk-的对比 )
13
13
- [ 1.1.4. Java 和 C++的区别?] ( #114-java-和-c的区别 )
14
- - [ 1.1.5. 什么是 Java 程序的主类 应用程序和小程序的主类有何不同?] ( #115-什么是-java-程序的主类-应用程序和小程序的主类有何不同 )
15
- - [ 1.1.6. import java 和 javax 有什么区别?] ( #116-import-java-和-javax-有什么区别 )
16
- - [ 1.1.7. 为什么说 Java 语言“编译与解释并存”?] ( #117-为什么说-java-语言编译与解释并存 )
14
+ - [ 1.1.5. import java 和 javax 有什么区别?] ( #115-import-java-和-javax-有什么区别 )
15
+ - [ 1.1.6. 为什么说 Java 语言“编译与解释并存”?] ( #116-为什么说-java-语言编译与解释并存 )
17
16
- [ 1.2. Java 语法] ( #12-java-语法 )
18
17
- [ 1.2.1. 字符型常量和字符串常量的区别?] ( #121-字符型常量和字符串常量的区别 )
19
18
- [ 1.2.2. 关于注释?] ( #122-关于注释 )
52
51
- [ 2.3. 修饰符] ( #23-修饰符 )
53
52
- [ 2.3.1. 在一个静态方法内调用一个非静态成员为什么是非法的?] ( #231-在一个静态方法内调用一个非静态成员为什么是非法的 )
54
53
- [ 2.3.2. 静态方法和实例方法有何不同] ( #232-静态方法和实例方法有何不同 )
55
- - [ 2.5 . 其它重要知识点] ( #25 -其它重要知识点 )
56
- - [ 2.5 .1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?] ( #251 -string-stringbuffer-和-stringbuilder-的区别是什么-string-为什么是不可变的 )
57
- - [ 2.5 .2. Object 类的常见方法总结] ( #252 -object-类的常见方法总结 )
58
- - [ 2.5 .3. == 与 equals(重要)] ( #253 -与-equals重要 )
59
- - [ 2.5 .4. hashCode 与 equals (重要)] ( #254 -hashcode-与-equals-重要 )
60
- - [ 2.5 .4.1. hashCode()介绍] ( #2541 -hashcode介绍 )
61
- - [ 2.5 .4.2. 为什么要有 hashCode] ( #2542 -为什么要有-hashcode )
62
- - [ 2.5 .4.3. hashCode()与 equals()的相关规定] ( #2543 -hashcode与-equals的相关规定 )
63
- - [ 2.5 .5. Java 序列化中如果有些字段不想进行序列化,怎么办?] ( #255 -java-序列化中如果有些字段不想进行序列化怎么办 )
64
- - [ 2.5 .6. 获取用键盘输入常用的两种方法] ( #256 -获取用键盘输入常用的两种方法 )
54
+ - [ 2.4 . 其它重要知识点] ( #24 -其它重要知识点 )
55
+ - [ 2.4 .1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?] ( #241 -string-stringbuffer-和-stringbuilder-的区别是什么-string-为什么是不可变的 )
56
+ - [ 2.4 .2. Object 类的常见方法总结] ( #242 -object-类的常见方法总结 )
57
+ - [ 2.4 .3. == 与 equals(重要)] ( #243 -与-equals重要 )
58
+ - [ 2.4 .4. hashCode 与 equals (重要)] ( #244 -hashcode-与-equals-重要 )
59
+ - [ 2.4 .4.1. hashCode()介绍] ( #2441 -hashcode介绍 )
60
+ - [ 2.4 .4.2. 为什么要有 hashCode] ( #2442 -为什么要有-hashcode )
61
+ - [ 2.4 .4.3. hashCode()与 equals()的相关规定] ( #2443 -hashcode与-equals的相关规定 )
62
+ - [ 2.4 .5. Java 序列化中如果有些字段不想进行序列化,怎么办?] ( #245 -java-序列化中如果有些字段不想进行序列化怎么办 )
63
+ - [ 2.4 .6. 获取用键盘输入常用的两种方法] ( #246 -获取用键盘输入常用的两种方法 )
65
64
- [ 3. Java 核心技术] ( #3-java-核心技术 )
66
65
- [ 3.1. 反射机制] ( #31-反射机制 )
67
66
- [ 3.1.1.静态编译和动态编译] ( #311静态编译和动态编译 )
84
83
<!-- /code_chunk_output -->
85
84
86
85
86
+
87
87
## 1. Java 基本功
88
88
89
89
### 1.1. Java 入门(基础概念与常识)
@@ -1004,9 +1004,9 @@ public class Student {
1004
1004
1005
1005
2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
1006
1006
1007
- ### 2.5 . 其它重要知识点
1007
+ ### 2.4 . 其它重要知识点
1008
1008
1009
- #### 2.5 . 1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
1009
+ #### 2.4 . 1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
1010
1010
1011
1011
** 可变性**
1012
1012
@@ -1051,7 +1051,7 @@ abstract class AbstractStringBuilder implements Appendable, CharSequence {
1051
1051
2. 单线程操作字符串缓冲区下操作大量数据: 适用 `StringBuilder `
1052
1052
3. 多线程操作字符串缓冲区下操作大量数据: 适用 `StringBuffer `
1053
1053
1054
- #### 2.5 . 2. Object 类的常见方法总结
1054
+ #### 2.4 . 2. Object 类的常见方法总结
1055
1055
1056
1056
Object 类是一个特殊的类,是所有类的父类。它主要提供了以下 11 个方法:
1057
1057
@@ -1080,7 +1080,7 @@ protected void finalize() throws Throwable { }//实例被垃圾回收器回收
1080
1080
1081
1081
```
1082
1082
1083
- #### 2.5 . 3. == 与 equals(重要)
1083
+ #### 2.4 . 3. == 与 equals(重要)
1084
1084
1085
1085
* *= = ** : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型== 比较的是值,引用数据类型== 比较的是内存地址)。
1086
1086
@@ -1116,23 +1116,23 @@ public class test1 {
1116
1116
- String 中的 equals 方法是被重写过的,因为 object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。
1117
1117
- 当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。
1118
1118
1119
- #### 2.5 . 4. hashCode 与 equals (重要)
1119
+ #### 2.4 . 4. hashCode 与 equals (重要)
1120
1120
1121
1121
面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写 equals 时必须重写 hashCode 方法?”
1122
1122
1123
- ##### 2.5 . 4.1 . hashCode()介绍
1123
+ ##### 2.4 . 4.1 . hashCode()介绍
1124
1124
1125
1125
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在 JDK 的 Object . java 中,这就意味着 Java 中的任何类都包含有 hashCode() 函数。
1126
1126
1127
1127
散列表存储的是键值对(key- value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象)
1128
1128
1129
- ##### 2.5 . 4.2 . 为什么要有 hashCode
1129
+ ##### 2.4 . 4.2 . 为什么要有 hashCode
1130
1130
1131
1131
** 我们先以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode:** 当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与该位置其他已经加入的对象的 hashcode 值作比较,如果没有相符的 hashcode,HashSet 会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用 `equals()`方法来检查 hashcode 相等的对象是否真的相同。如果两者相同,HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自我的 Java 启蒙书《Head first java》第二版)。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。
1132
1132
1133
1133
通过我们可以看出:`hashCode()` 的作用就是** 获取哈希码** ,也称为散列码;它实际上是返回一个 int 整数。这个** 哈希码的作用** 是确定该对象在哈希表中的索引位置。** `hashCode()`在散列表中才有用,在其它情况下没用** 。在散列表中 hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
1134
1134
1135
- ##### 2.5 . 4.3 . hashCode()与 equals()的相关规定
1135
+ ##### 2.4 . 4.3 . hashCode()与 equals()的相关规定
1136
1136
1137
1137
1. 如果两个对象相等,则 hashcode 一定也是相同的
1138
1138
2. 两个对象相等,对两个对象分别调用 equals 方法都返回 true
@@ -1142,13 +1142,13 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返
1142
1142
1143
1143
推荐阅读:[Java hashCode() 和 equals()的若干问题解答](https: // www.cnblogs.com/skywang12345/p/3324958.html)
1144
1144
1145
- #### 2.5 . 5. Java 序列化中如果有些字段不想进行序列化,怎么办?
1145
+ #### 2.4 . 5. Java 序列化中如果有些字段不想进行序列化,怎么办?
1146
1146
1147
1147
对于不想进行序列化的变量,使用 transient 关键字修饰。
1148
1148
1149
1149
transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。transient 只能修饰变量,不能修饰类和方法。
1150
1150
1151
- #### 2.5 . 6. 获取用键盘输入常用的两种方法
1151
+ #### 2.4 . 6. 获取用键盘输入常用的两种方法
1152
1152
1153
1153
方法 1 :通过 Scanner
1154
1154
0 commit comments