|
1 | | - |
2 | 1 | <!-- MarkdownTOC --> |
3 | 2 |
|
4 | 3 | - [1. 面向对象和面向过程的区别](#1-面向对象和面向过程的区别) |
@@ -168,8 +167,23 @@ Java 语言通过字节码的方式,在一定程度上解决了传统解释型 |
168 | 167 | **可变性** |
169 | 168 |
|
170 | 169 |
|
171 | | -String 类中使用字符数组保存字符串,private final char value[],所以 String 对象是不可变的。StringBuilder 与 StringBuffer 都继承自AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串,char[]value,这两种对象都是可变的。 |
172 | | - |
| 170 | +简单的来说:String 类中使用 final 关键字字符数组保存字符串,`private final char value[]`,所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串`char[]value` 但是没有用 final 关键字修饰,所以这两种对象都是可变的。 |
| 171 | + |
| 172 | +StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是 AbstractStringBuilder 实现的,大家可以自行查阅源码。 |
| 173 | + |
| 174 | +AbstractStringBuilder.java |
| 175 | + |
| 176 | +```java |
| 177 | +abstract class AbstractStringBuilder implements Appendable, CharSequence { |
| 178 | + char[] value; |
| 179 | + int count; |
| 180 | + AbstractStringBuilder() { |
| 181 | + } |
| 182 | + AbstractStringBuilder(int capacity) { |
| 183 | + value = new char[capacity]; |
| 184 | + } |
| 185 | +``` |
| 186 | + |
173 | 187 |
|
174 | 188 | **线程安全性** |
175 | 189 |
|
@@ -379,5 +393,3 @@ final关键字主要用在三个地方:变量、方法、类。 |
379 | 393 | 这本书要常读,初学者可以快速概览,中等程序员可以深入看看 Java,老鸟还可以用之回顾 Java 的体系。这本书之所以厉害,因为它在无形中整合了设计模式,这本书之所以难读,也恰恰在于他对设计模式的整合是无形的。 |
380 | 394 |
|
381 | 395 |
|
382 | | - |
383 | | - |
|
0 commit comments