什么样的字符串会被存在常量池中
时间: 2023-06-01 07:02:42 浏览: 66
以下几种字符串会被存在常量池中:
1. 使用字面量方式创建的字符串,例如:"Hello World"。
2. 使用 String 类的 intern() 方法将字符串加入常量池中。
3. 在编译期间确定的字符串常量,例如字符串常量表达式 "abc" + "def"。
4. 在类文件中出现的符号引用,例如类名、方法名、字段名等。
需要注意的是,使用 new String() 创建的字符串对象不会被存储在常量池中,而是在堆内存中创建一个新的对象。
相关问题
为什么传入实参会自动在字符串常量池
在 Java 中,字符串常量池是一个特殊的内存区域,用于存储字符串常量。当我们使用字符串字面量的方式创建字符串时,例如 `"hello"`,Java 编译器会首先检查字符串常量池中是否存在值为 `"hello"` 的字符串常量,如果存在,则直接使用这个常量;如果不存在,则在常量池中创建一个新的字符串常量,然后使用它。因为字符串常量池的特殊性质,相同的字符串常量在内存中只会存在一份,所以在使用字符串字面量时,可以有效地减少内存的占用。
而当我们使用 `new String("hello")` 的方式创建字符串时,Java 会先在常量池中查找是否存在值为 `"hello"` 的字符串常量,如果存在,则在堆中创建一个新的字符串对象,这个对象的值与常量池中的字符串常量相同;如果不存在,则先在常量池中创建一个新的字符串常量,然后在堆中创建一个新的字符串对象,这个对象的值与常量池中的字符串常量相同。因此,如果我们需要创建一个新的字符串对象,可以使用 `new String("hello")` 的方式,但如果只是需要使用一个字符串常量,应该使用字符串字面量的方式。
什么是字符串常量池?
字符串常量池是Java中的一个特殊的内存区域,用于存储字符串字面量和字符串对象的引用。它的主要作用是节省内存空间和提高字符串的重用性。
在Java中,字符串是不可变的,即一旦创建就不能被修改。当我们创建一个字符串时,如果字符串常量池中已经存在相同内容的字符串字面量,那么新创建的字符串会直接引用已存在的字符串对象,而不会再创建一个新的对象。这样可以避免重复创建相同内容的字符串,节省了内存空间。
字符串常量池有两种存储方式:
1. JDK6及之前的版本,字符串常量池位于方法区中,存放的是各种字面量和符号引用表。
2. JDK7及之后的版本,字符串常量池被移到了堆中,存放的是字符串的引用或者字符串对象。
通过使用字符串常量池,Java可以实现字符串的共享和重用,提高了程序的性能和效率。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)