File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -7,15 +7,15 @@ category: 原创
77draft : false
88---
99
10- 一、堆与字符串常量池
10+ ## 一、堆与字符串常量池
1111堆是 Java 虚拟机中存储对象实例和数组的内存区域。
1212字符串常量池(String Pool)是 JVM 专门为字符串字面量分配的区域,用于存放所有用双引号声明的字符串常量,以及运行时调用 ` intern() ` 方法生成的字符串。常量池中的相同内容只保存一份,多个引用会指向同一个对象,从而节省内存并提升效率。
1313
1414![ 在这里插入图片描述] ( ./image.png )
1515
1616字符串池能够成立的前提是 ** String 对象不可变** ,这样多个引用共享同一对象才不会互相影响;若可变,则一个引用修改会影响所有引用,显然不可行。
1717
18- 二、Java 创建字符串对象的两种方式
18+ ## 二、Java 创建字符串对象的两种方式
1919
20201 . ** 字面值方式**
2121
@@ -37,14 +37,14 @@ System.out.println(str1 == str2); // false
3737
3838` new String("aaa") ` 时,若常量池无 ` "aaa" ` 会先创建,然后** 无论是否存在** ,都会在堆中新建一个 ` "aaa" ` 对象并返回其引用。每次 ` new ` 都会产生新的堆对象,因此 ` == ` 为 ` false ` 。
3939
40- 三、经典面试题:创建了几个对象?
40+ ## 三、经典面试题:创建了几个对象?
4141
42421 . ` String s1 = "11"; ` → 1 个(常量池)。
43432 . ` String s1 = "1" + "1"; ` → 编译期优化成 ` "11" ` ,1 个(常量池)。
44443 . ` String s1 = new String("11"); ` → 常量池 1 个 + 堆 1 个 = 2 个。
45454 . ` String s1 = new String("1") + new String("1"); ` → 常量池 ` "1" ` 1 个 + 堆 ` "1" ` 2 个 + 堆 ` "11" ` 1 个 = 4 个。
4646
47- 四、` String.intern() ` 的作用
47+ ## 四、` String.intern() ` 的作用
4848
4949* ** 常量池已存在** :返回常量池中已有的引用,不加入当前对象。
5050
Original file line number Diff line number Diff line change @@ -7,8 +7,6 @@ category: 原创
77draft : false
88---
99
10- # Java 中的接口(Interface)与抽象类(Abstract Class)对比
11-
1210在 Java 中,接口(Interface)和抽象类(Abstract Class)都是用于定义抽象概念的机制,因此它们都不能直接实例化。
1311
1412随着 Java 的发展,接口功能不断增强(默认方法、私有方法、静态方法等),而抽象类的角色逐渐被弱化。现代 Java 开发中,接口已经可以替代 ** 90%** 的抽象类场景,但抽象类仍保留其独特价值。
Original file line number Diff line number Diff line change @@ -7,8 +7,6 @@ category: 原创
77draft : false
88---
99
10- # HashMap 中如何用位运算来提高性能
11-
1210在 Java 开发中,HashMap 是最常用的数据结构之一。为什么要求容量必须是 2 的幂,以及如何使用位运算替代取模运算,是理解 HashMap 高性能设计的关键。
1311
1412## 一、HashMap 的基本设计
You can’t perform that action at this time.
0 commit comments