java字符串常量池保存在哪里?如何证明?
时间: 2024-05-10 16:18:53 浏览: 10
在Java中,字符串常量池是堆内存的一部分。可以通过以下代码证明:
```java
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1 == str2); // true,因为它们都指向字符串常量池中的同一个对象
System.out.println(str1 == str3); // false,因为str3指向堆内存中的一个新对象
```
在上面的代码中,`str1`和`str2`都指向字符串常量池中的同一个对象,因此它们是相等的。而`str3`指向堆内存中的一个新对象,所以它和`str1`不相等。这表明字符串常量池位于堆内存中。
相关问题
java字符串常量池在JDK各个版本中保存在哪里?
Java字符串常量池在JDK的各个版本中保存在不同的位置,具体如下:
- JDK1.6及之前版本:字符串常量池保存在永久代(PermGen)中。
- JDK1.7及之后版本:字符串常量池被移出永久代,保存在堆中,与其他普通对象一样。
需要注意的是,JDK1.8中已经移除了永久代,取而代之的是元空间(Metaspace),而字符串常量池也被保存在元空间中。因此,在JDK1.8及之后版本,字符串常量池与其他类数据一样,被加载到元空间中。
怎么声明字符串(String)?字符串new出来保存到哪里?如果是字符串常量保存在哪?
要声明一个字符串,可以使用以下语法:
```
String myString = "Hello World!";
```
这会创建一个名为myString的字符串变量,并将其初始化为"Hello World!"。
如果要将一个字符串实例化为一个对象,则可以使用以下语法:
```
String myString = new String("Hello World!");
```
这会将字符串"Hello World!"实例化为一个新的String对象,并将其分配给myString变量。
对于字符串常量,它们通常会被编译器放在一个所谓的"字符串池"中。在运行时,这些字符串会被重用,以便节省内存。因此,如果您声明一个字符串常量,编译器会自动将其添加到字符串池中。