怎么声明字符串(String)?字符串new出来保存到哪里?如果是字符串常量保存在哪?
时间: 2023-06-01 21:06:47 浏览: 126
要声明一个字符串,可以使用以下语法:
```
String myString = "Hello World!";
```
这会创建一个名为myString的字符串变量,并将其初始化为"Hello World!"。
如果要将一个字符串实例化为一个对象,则可以使用以下语法:
```
String myString = new String("Hello World!");
```
这会将字符串"Hello World!"实例化为一个新的String对象,并将其分配给myString变量。
对于字符串常量,它们通常会被编译器放在一个所谓的"字符串池"中。在运行时,这些字符串会被重用,以便节省内存。因此,如果您声明一个字符串常量,编译器会自动将其添加到字符串池中。
相关问题
// 在堆中创建字符串对象”Java“ // 将字符串对象”Java“的引用保存在字符串常量池中 String s1 = "Java"; // 直接返回字符串常量池中字符串对象”Java“对应的引用 String s2 = s1.intern(); // 会在堆中在单独创建一个字符串对象 String s3 = new String("Java"); // 直接返回字符串常量池中字符串对象”Java“对应的引用 String s4 = s3.intern(); //
您的问题似乎是关于Java字符串常量池的使用。
在Java中,字符串常量池是一个特殊的内存区域,用于存储字符串常量。当您创建一个字符串对象时,如果该字符串已经存在于常量池中,则返回该字符串在常量池中的引用,否则会在常量池中创建一个新的字符串对象。
对于您提供的代码片段,当您在堆中创建字符串对象"Java"时,它会被保存在常量池中。然后,通过调用`s1.intern()`方法,会返回常量池中"Java"字符串对象的引用,该引用被赋给`s2`变量。接下来,通过使用`new`关键字在堆中创建了另一个字符串对象"Java",该对象的引用被赋给`s3`变量。最后,通过调用`s3.intern()`方法,会返回常量池中"Java"字符串对象的引用,该引用被赋给`s4`变量。
需要注意的是,对于`s1`和`s2`变量以及`s3`和`s4`变量,它们的值虽然相同,但它们所引用的对象并不相同。`s1`和`s2`所引用的对象是常量池中的同一个对象,而`s3`和`s4`所引用的对象是在堆中分别创建的两个不同对象。
java字符串常量池保存在哪里?如何证明?
在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`不相等。这表明字符串常量池位于堆内存中。
阅读全文