Skip to content

Commit 12a513c

Browse files
committed
auto commit
1 parent f491430 commit 12a513c

File tree

3 files changed

+46
-42
lines changed

3 files changed

+46
-42
lines changed

docs/notes/Java 基础.md

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,11 @@ value 数组被声明为 final,这意味着 value 数组初始化之后就不
193193

194194
如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。
195195

196-
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/9112288f-23f5-4e53-b222-a46fdbca1603.png" width="300px"> </div><br>
196+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191210004132894.png"/> </div><br>
197197

198198
**3. 安全性**
199199

200-
String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。
200+
String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 的那一方以为现在连接的是其它主机,而实际情况却不一定是。
201201

202202
**4. 线程安全**
203203

@@ -222,11 +222,11 @@ String 不可变性天生具备线程安全,可以在多个线程中安全地
222222

223223
## String Pool
224224

225-
字符串常量池(String Pool)保存着所有字符串字面量(literal strings),这些字面量在编译时期就确定。不仅如此,还可以使用 String 的 intern() 方法在运行过程中将字符串添加到 String Pool 中。
225+
字符串常量池(String Pool)保存着所有字符串字面量(literal strings),这些字面量在编译时期就确定。不仅如此,还可以使用 String 的 intern() 方法在运行过程将字符串添加到 String Pool 中。
226226

227227
当一个字符串调用 intern() 方法时,如果 String Pool 中已经存在一个字符串和该字符串值相等(使用 equals() 方法进行确定),那么就会返回 String Pool 中字符串的引用;否则,就会在 String Pool 中添加一个新的字符串,并返回这个新字符串的引用。
228228

229-
下面示例中,s1 和 s2 采用 new String() 的方式新建了两个不同字符串,而 s3 和 s4 是通过 s1.intern() 方法取得一个字符串引用。intern() 首先把 s1 引用的字符串放到 String Pool 中,然后返回这个字符串引用。因此 s3 和 s4 引用的是同一个字符串。
229+
下面示例中,s1 和 s2 采用 new String() 的方式新建了两个不同字符串,而 s3 和 s4 是通过 s1.intern() 方法取得同一个字符串引用。intern() 首先把 s1 引用的字符串放到 String Pool 中,然后返回这个字符串引用。因此 s3 和 s4 引用的是同一个字符串。
230230

231231
```java
232232
String s1 = new String("aaa");
@@ -310,7 +310,7 @@ public String(String original) {
310310

311311
Java 的参数是以值传递的形式传入方法中,而不是引用传递。
312312

313-
以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。因此在方法中使指针引用其它对象,那么这两个指针此时指向的是完全不同的对象,在一方改变其所指向对象的内容时对另一方没有影响。
313+
以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。
314314

315315
```java
316316
public class Dog {
@@ -335,37 +335,39 @@ public class Dog {
335335
}
336336
```
337337

338+
在方法中改变对象的字段值会改变原对象该字段值,因为引用的是同一个对象。
339+
338340
```java
339-
public class PassByValueExample {
341+
class PassByValueExample {
340342
public static void main(String[] args) {
341343
Dog dog = new Dog("A");
342-
System.out.println(dog.getObjectAddress()); // Dog@4554617c
343344
func(dog);
344-
System.out.println(dog.getObjectAddress()); // Dog@4554617c
345-
System.out.println(dog.getName()); // A
345+
System.out.println(dog.getName()); // B
346346
}
347347

348348
private static void func(Dog dog) {
349-
System.out.println(dog.getObjectAddress()); // Dog@4554617c
350-
dog = new Dog("B");
351-
System.out.println(dog.getObjectAddress()); // Dog@74a14482
352-
System.out.println(dog.getName()); // B
349+
dog.setName("B");
353350
}
354351
}
355352
```
356353

357-
如果在方法中改变对象的字段值会改变原对象该字段值,因为改变的是同一个地址指向的内容
354+
但是在方法中将指针引用了其它对象,那么此时方法里和方法外的两个指针指向了不同的对象,在一个指针改变其所指向对象的内容对另一个指针所指向的对象没有影响
358355

359356
```java
360-
class PassByValueExample {
357+
public class PassByValueExample {
361358
public static void main(String[] args) {
362359
Dog dog = new Dog("A");
360+
System.out.println(dog.getObjectAddress()); // Dog@4554617c
363361
func(dog);
364-
System.out.println(dog.getName()); // B
362+
System.out.println(dog.getObjectAddress()); // Dog@4554617c
363+
System.out.println(dog.getName()); // A
365364
}
366365

367366
private static void func(Dog dog) {
368-
dog.setName("B");
367+
System.out.println(dog.getObjectAddress()); // Dog@4554617c
368+
dog = new Dog("B");
369+
System.out.println(dog.getObjectAddress()); // Dog@74a14482
370+
System.out.println(dog.getName()); // B
369371
}
370372
}
371373
```
@@ -390,18 +392,18 @@ float f = 1.1f;
390392

391393
## 隐式类型转换
392394

393-
因为字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型下转型为 short 类型。
395+
因为字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型向下转型为 short 类型。
394396

395397
```java
396398
short s1 = 1;
397399
// s1 = s1 + 1;
398400
```
399401

400-
但是使用 += 或者 ++ 运算符可以执行隐式类型转换
402+
但是使用 += 或者 ++ 运算符会执行隐式类型转换
401403

402404
```java
403405
s1 += 1;
404-
// s1++;
406+
s1++;
405407
```
406408

407409
上面的语句相当于将 s1 + 1 的计算结果进行了向下转型:
@@ -428,7 +430,7 @@ switch (s) {
428430
}
429431
```
430432

431-
switch 不支持 long,是因为 switch 的设计初衷是对那些只有少数的几个值进行等值判断,如果值过于复杂,那么还是用 if 比较合适。
433+
switch 不支持 long,是因为 switch 的设计初衷是对那些只有少数几个值的类型进行等值判断,如果值过于复杂,那么还是用 if 比较合适。
432434

433435
```java
434436
// long x = 111;

notes/Java 基础.md

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,11 @@ value 数组被声明为 final,这意味着 value 数组初始化之后就不
193193

194194
如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。
195195

196-
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/9112288f-23f5-4e53-b222-a46fdbca1603.png" width="300px"> </div><br>
196+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191210004132894.png"/> </div><br>
197197

198198
**3. 安全性**
199199

200-
String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。
200+
String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 的那一方以为现在连接的是其它主机,而实际情况却不一定是。
201201

202202
**4. 线程安全**
203203

@@ -222,11 +222,11 @@ String 不可变性天生具备线程安全,可以在多个线程中安全地
222222

223223
## String Pool
224224

225-
字符串常量池(String Pool)保存着所有字符串字面量(literal strings),这些字面量在编译时期就确定。不仅如此,还可以使用 String 的 intern() 方法在运行过程中将字符串添加到 String Pool 中。
225+
字符串常量池(String Pool)保存着所有字符串字面量(literal strings),这些字面量在编译时期就确定。不仅如此,还可以使用 String 的 intern() 方法在运行过程将字符串添加到 String Pool 中。
226226

227227
当一个字符串调用 intern() 方法时,如果 String Pool 中已经存在一个字符串和该字符串值相等(使用 equals() 方法进行确定),那么就会返回 String Pool 中字符串的引用;否则,就会在 String Pool 中添加一个新的字符串,并返回这个新字符串的引用。
228228

229-
下面示例中,s1 和 s2 采用 new String() 的方式新建了两个不同字符串,而 s3 和 s4 是通过 s1.intern() 方法取得一个字符串引用。intern() 首先把 s1 引用的字符串放到 String Pool 中,然后返回这个字符串引用。因此 s3 和 s4 引用的是同一个字符串。
229+
下面示例中,s1 和 s2 采用 new String() 的方式新建了两个不同字符串,而 s3 和 s4 是通过 s1.intern() 方法取得同一个字符串引用。intern() 首先把 s1 引用的字符串放到 String Pool 中,然后返回这个字符串引用。因此 s3 和 s4 引用的是同一个字符串。
230230

231231
```java
232232
String s1 = new String("aaa");
@@ -310,7 +310,7 @@ public String(String original) {
310310

311311
Java 的参数是以值传递的形式传入方法中,而不是引用传递。
312312

313-
以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。因此在方法中使指针引用其它对象,那么这两个指针此时指向的是完全不同的对象,在一方改变其所指向对象的内容时对另一方没有影响。
313+
以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。
314314

315315
```java
316316
public class Dog {
@@ -335,37 +335,39 @@ public class Dog {
335335
}
336336
```
337337

338+
在方法中改变对象的字段值会改变原对象该字段值,因为引用的是同一个对象。
339+
338340
```java
339-
public class PassByValueExample {
341+
class PassByValueExample {
340342
public static void main(String[] args) {
341343
Dog dog = new Dog("A");
342-
System.out.println(dog.getObjectAddress()); // Dog@4554617c
343344
func(dog);
344-
System.out.println(dog.getObjectAddress()); // Dog@4554617c
345-
System.out.println(dog.getName()); // A
345+
System.out.println(dog.getName()); // B
346346
}
347347

348348
private static void func(Dog dog) {
349-
System.out.println(dog.getObjectAddress()); // Dog@4554617c
350-
dog = new Dog("B");
351-
System.out.println(dog.getObjectAddress()); // Dog@74a14482
352-
System.out.println(dog.getName()); // B
349+
dog.setName("B");
353350
}
354351
}
355352
```
356353

357-
如果在方法中改变对象的字段值会改变原对象该字段值,因为改变的是同一个地址指向的内容
354+
但是在方法中将指针引用了其它对象,那么此时方法里和方法外的两个指针指向了不同的对象,在一个指针改变其所指向对象的内容对另一个指针所指向的对象没有影响
358355

359356
```java
360-
class PassByValueExample {
357+
public class PassByValueExample {
361358
public static void main(String[] args) {
362359
Dog dog = new Dog("A");
360+
System.out.println(dog.getObjectAddress()); // Dog@4554617c
363361
func(dog);
364-
System.out.println(dog.getName()); // B
362+
System.out.println(dog.getObjectAddress()); // Dog@4554617c
363+
System.out.println(dog.getName()); // A
365364
}
366365

367366
private static void func(Dog dog) {
368-
dog.setName("B");
367+
System.out.println(dog.getObjectAddress()); // Dog@4554617c
368+
dog = new Dog("B");
369+
System.out.println(dog.getObjectAddress()); // Dog@74a14482
370+
System.out.println(dog.getName()); // B
369371
}
370372
}
371373
```
@@ -390,18 +392,18 @@ float f = 1.1f;
390392

391393
## 隐式类型转换
392394

393-
因为字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型下转型为 short 类型。
395+
因为字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型向下转型为 short 类型。
394396

395397
```java
396398
short s1 = 1;
397399
// s1 = s1 + 1;
398400
```
399401

400-
但是使用 += 或者 ++ 运算符可以执行隐式类型转换
402+
但是使用 += 或者 ++ 运算符会执行隐式类型转换
401403

402404
```java
403405
s1 += 1;
404-
// s1++;
406+
s1++;
405407
```
406408

407409
上面的语句相当于将 s1 + 1 的计算结果进行了向下转型:
@@ -428,7 +430,7 @@ switch (s) {
428430
}
429431
```
430432

431-
switch 不支持 long,是因为 switch 的设计初衷是对那些只有少数的几个值进行等值判断,如果值过于复杂,那么还是用 if 比较合适。
433+
switch 不支持 long,是因为 switch 的设计初衷是对那些只有少数几个值的类型进行等值判断,如果值过于复杂,那么还是用 if 比较合适。
432434

433435
```java
434436
// long x = 111;
43.3 KB
Loading

0 commit comments

Comments
 (0)