Java 中字符串的内存分配
💡
原文英文,约800词,阅读约需3分钟。
📝
内容提要
Java中,字符串以String类的对象形式存储在内存中,内存分为堆栈和堆两部分。堆内存中有字符串常量池,用于存储唯一的字符串字面量。堆栈内存中存储变量和对象引用。创建字符串对象有两种方式:字符串字面量和使用new关键字。通过“==”运算符比较物理地址,通过equals函数比较内容。使用字符串字面量节省内存空间,但常量池大小有限。使用new关键字创建对象可以释放不需要的对象,但会增加JVM负担。
🎯
关键要点
-
Java中的字符串以String类的对象形式存储在内存中。
-
内存分为堆栈和堆两部分,堆内存中有字符串常量池用于存储唯一的字符串字面量。
-
创建字符串对象有两种方式:字符串字面量和使用new关键字。
-
通过'=='运算符比较物理地址,通过equals函数比较内容。
-
使用字符串字面量节省内存空间,但常量池大小有限。
-
使用new关键字创建对象可以释放不需要的对象,但会增加JVM负担。
-
字符串字面量创建时,JVM会检查常量池中是否已存在该字面量。
-
使用new关键字创建字符串对象时,会在堆和常量池中各创建一个对象。
-
比较字符串对象时,'=='运算符比较物理地址,equals函数比较内容。
-
字符串常量池的大小是固定的,可能会满。
-
使用new关键字会增加JVM的负担,因为每次都会创建新对象。
➡️